1 R Markdown

This is an R Markdown document. Markdown is a simple formatting syntax for authoring HTML, PDF, and MS Word documents. For more details on using R Markdown see http://rmarkdown.rstudio.com.

When you click the Knit button a document will be generated that includes both content as well as the output of any embedded R code chunks within the document.


2 Librerías necesarias para el proyecto.


if(!require(dplyr)){
    install.packages('dplyr', repos='http://cran.us.r-project.org')
    library(dplyr)
}
## Loading required package: dplyr
## Warning: package 'dplyr' was built under R version 4.2.2
## 
## Attaching package: 'dplyr'
## The following objects are masked from 'package:stats':
## 
##     filter, lag
## The following objects are masked from 'package:base':
## 
##     intersect, setdiff, setequal, union
if(!require(stringr)){
    install.packages('stringr', repos='http://cran.us.r-project.org')
    library(stringr)
}
## Loading required package: stringr
## Warning: package 'stringr' was built under R version 4.2.2
if(!require(ggplot2)){
    install.packages('ggplot2', repos='http://cran.us.r-project.org')
    library(ggplot2)
}
## Loading required package: ggplot2
## Warning: package 'ggplot2' was built under R version 4.2.2
if(!require(tidyr)){
    install.packages('tidyr', repos='http://cran.us.r-project.org')
    library(tidyr)
}
## Loading required package: tidyr
## Warning: package 'tidyr' was built under R version 4.2.2
if(!require(corrplot)){
    install.packages('corrplot', repos='http://cran.us.r-project.org')
    library(corrplot)
}
## Loading required package: corrplot
## Warning: package 'corrplot' was built under R version 4.2.1
## corrplot 0.92 loaded
if(!require(GGally)){
    install.packages('GGally', repos='http://cran.us.r-project.org')
    library(GGally)
}
## Loading required package: GGally
## Warning: package 'GGally' was built under R version 4.2.3
## Registered S3 method overwritten by 'GGally':
##   method from   
##   +.gg   ggplot2
if(!require(factoextra)){
    install.packages('factoextra', repos='http://cran.us.r-project.org')
    library(factoextra)
}
## Loading required package: factoextra
## Warning: package 'factoextra' was built under R version 4.2.1
## Welcome! Want to learn more? See two factoextra-related books at https://goo.gl/ve3WBa
if(!require(cluster)){
    install.packages('cluster', repos='http://cran.us.r-project.org')
    library(cluster)
}
## Loading required package: cluster
## Warning: package 'cluster' was built under R version 4.2.2
if(!require(FactoMineR)){
    install.packages('FactoMineR', repos='http://cran.us.r-project.org')
    library(FactoMineR)
}
## Loading required package: FactoMineR
## Warning: package 'FactoMineR' was built under R version 4.2.2

3 Construcción del Conjunto de datos


# Carga y procesado de los datos del Panel de Indicadores de población

df_indPob <- read.csv("DataSet/panel_indicadores_distritos_barrios.csv", sep = ";", dec = ".")
str(df_indPob)
## 'data.frame':    55799 obs. of  18 variables:
##  $ Orden             : int  1 2 3 4 5 6 7 8 9 10 ...
##  $ Periodo.panel     : chr  "2019" "2019" "2019" "2019" ...
##  $ ciudad            : chr  "Ciudad de Madrid" "Ciudad de Madrid" "Ciudad de Madrid" "Ciudad de Madrid" ...
##  $ cod_distrito      : int  NA NA NA NA NA NA NA NA NA NA ...
##  $ distrito          : chr  "" "" "" "" ...
##  $ cod_barrio        : int  NA NA NA NA NA NA NA NA NA NA ...
##  $ barrio            : chr  "" "" "" "" ...
##  $ año               : int  2019 2019 2019 2019 2019 2019 2019 2019 2019 2019 ...
##  $ fecha_indicador   : chr  "01/01/2019" "01/01/2019" "01/01/2019" "01/01/2019" ...
##  $ fuente_indicador  : chr  "Estadística Ayuntamiento de Madrid" "Estadística Ayuntamiento de Madrid" "Estadística Ayuntamiento de Madrid" "Estadística Ayuntamiento de Madrid" ...
##  $ categoría_1       : chr  "Características Generales del Distrito-Barrio" "Características Generales del Distrito-Barrio" "Población del distrito" "Población del distrito" ...
##  $ categoría_2       : chr  "" "" "Estructura de población" "Estructura de población" ...
##  $ indicador_nivel1  : chr  "Superficie" "Población densidad de población" "Número de Habitantes" "Número de Habitantes" ...
##  $ indicador_nivel2  : chr  "" "" "" "Hombres" ...
##  $ indicador_nivel3  : chr  "" "" "" "" ...
##  $ unidad_indicador  : chr  "Ha" "Habitantes/Ha." "Habitantes" "Habitantes" ...
##  $ indicador_completo: chr  "Superficie (Ha.) " "Población densidad (hab./Ha.) " "Número Habitantes" "Población Hombres " ...
##  $ valor_indicador   : chr  "60.446" "54" "3.266.126" "1.521.178" ...
head(df_indPob)
##   Orden Periodo.panel           ciudad cod_distrito distrito cod_barrio barrio
## 1     1          2019 Ciudad de Madrid           NA                  NA       
## 2     2          2019 Ciudad de Madrid           NA                  NA       
## 3     3          2019 Ciudad de Madrid           NA                  NA       
## 4     4          2019 Ciudad de Madrid           NA                  NA       
## 5     5          2019 Ciudad de Madrid           NA                  NA       
## 6     6          2019 Ciudad de Madrid           NA                  NA       
##    año fecha_indicador                   fuente_indicador
## 1 2019      01/01/2019 Estadística Ayuntamiento de Madrid
## 2 2019      01/01/2019 Estadística Ayuntamiento de Madrid
## 3 2019      01/01/2019 Estadística Ayuntamiento de Madrid
## 4 2019      01/01/2019 Estadística Ayuntamiento de Madrid
## 5 2019      01/01/2019 Estadística Ayuntamiento de Madrid
## 6 2019      01/01/2019 Estadística Ayuntamiento de Madrid
##                                     categoría_1             categoría_2
## 1 Características Generales del Distrito-Barrio                        
## 2 Características Generales del Distrito-Barrio                        
## 3                        Población del distrito Estructura de población
## 4                        Población del distrito Estructura de población
## 5                        Población del distrito Estructura de población
## 6                        Población del distrito Estructura de población
##                  indicador_nivel1 indicador_nivel2 indicador_nivel3
## 1                      Superficie                                  
## 2 Población densidad de población                                  
## 3            Número de Habitantes                                  
## 4            Número de Habitantes          Hombres                 
## 5            Número de Habitantes          Mujeres                 
## 6                      Edad Media                                  
##   unidad_indicador             indicador_completo valor_indicador
## 1               Ha              Superficie (Ha.)           60.446
## 2   Habitantes/Ha. Población densidad (hab./Ha.)               54
## 3       Habitantes              Número Habitantes       3.266.126
## 4       Habitantes             Población Hombres        1.521.178
## 5       Habitantes              Población Mujeres       1.744.948
## 6             Edad     Edad media de la población           44,14
# cantidad de distritos y barrios en cada fichero csv

df_aux1_dist <- df_indPob %>%
  count(cod_distrito, name = "Cantidad_Distritos_Distintos")
df_aux1_barr <- df_indPob %>%
  count(cod_barrio, name = "Cantidad_Barios_Distintos")

head(df_aux1_dist)
##   cod_distrito Cantidad_Distritos_Distintos
## 1            1                         2555
## 2            2                         2849
## 3            3                         2538
## 4            4                         2523
## 5            5                         2526
## 6            6                         2546
head(df_aux1_barr)
##   cod_barrio Cantidad_Barios_Distintos
## 1         11                       321
## 2         12                       322
## 3         13                       313
## 4         14                       322
## 5         15                       322
## 6         16                       312

3.1 Indicador del Estado de Viviendas en los Distritos de Madrid

df_EstadoViviendas <- df_indPob %>%
  filter(str_detect(indicador_nivel2, 'Viviendas en estado | no costa'))

df_EstadoViviendas <- df_EstadoViviendas %>%
  mutate(valor_indicador = as.numeric(gsub("\\.", "", valor_indicador)))
## Warning in mask$eval_all_mutate(quo): NAs introducidos por coerción
df_EstadoViviendas$indicador_completo <- str_trim(df_EstadoViviendas$indicador_completo)


head(df_EstadoViviendas)
##   Orden Periodo.panel           ciudad cod_distrito distrito cod_barrio barrio
## 1   187          2019 Ciudad de Madrid           NA                  NA       
## 2   188          2019 Ciudad de Madrid           NA                  NA       
## 3   189          2019 Ciudad de Madrid           NA                  NA       
## 4   190          2019 Ciudad de Madrid           NA                  NA       
## 5   191          2019 Ciudad de Madrid           NA                  NA       
## 6   436          2019 Ciudad de Madrid            1   Centro         NA       
##    año fecha_indicador                   fuente_indicador categoría_1
## 1 2019            2019 Estadística Ayuntamiento de Madrid    Vivienda
## 2 2019            2019 Estadística Ayuntamiento de Madrid    Vivienda
## 3 2019            2019 Estadística Ayuntamiento de Madrid    Vivienda
## 4 2019            2019 Estadística Ayuntamiento de Madrid    Vivienda
## 5 2019            2019 Estadística Ayuntamiento de Madrid    Vivienda
## 6 2019            2019 Estadística Ayuntamiento de Madrid    Vivienda
##   categoría_2    indicador_nivel1               indicador_nivel2
## 1             Número de viviendas    Viviendas en estado ruinoso
## 2             Número de viviendas       Viviendas en estado malo
## 3             Número de viviendas Viviendas en estado deficiente
## 4             Número de viviendas      Viviendas en estado bueno
## 5             Número de viviendas Estado de la vivienda no costa
## 6             Número de viviendas    Viviendas en estado ruinoso
##   indicador_nivel3 unidad_indicador             indicador_completo
## 1                         Viviendas    Viviendas en estado ruinoso
## 2                         Viviendas       Viviendas en estado malo
## 3                         Viviendas Viviendas en estado deficiente
## 4                         Viviendas      Viviendas en estado bueno
## 5                         Viviendas Estado de la vivienda no costa
## 6                         Viviendas    Viviendas en estado ruinoso
##   valor_indicador
## 1            3445
## 2           12705
## 3           66775
## 4         1420265
## 5           27770
## 6             330
# subconjunto registros por estado de viviendas Totales en Madrid
df_EstadoViviendasTotales <- df_EstadoViviendas %>% 
  filter(is.na(cod_distrito)) %>%
  select(ciudad, indicador_completo, valor_indicador) %>%
  mutate(porcentaje = round(valor_indicador / sum(valor_indicador) *100,2))

head(df_EstadoViviendasTotales)
##             ciudad             indicador_completo valor_indicador porcentaje
## 1 Ciudad de Madrid    Viviendas en estado ruinoso            3445       0.23
## 2 Ciudad de Madrid       Viviendas en estado malo           12705       0.83
## 3 Ciudad de Madrid Viviendas en estado deficiente           66775       4.36
## 4 Ciudad de Madrid      Viviendas en estado bueno         1420265      92.77
## 5 Ciudad de Madrid Estado de la vivienda no costa           27770       1.81
# subconjunto registros por estado de viviendas por Distritos en Madrid
df_EstadoViviendasDist <- df_EstadoViviendas %>%
  select(cod_distrito, distrito, indicador_completo, valor_indicador) %>%
  filter(!is.na(cod_distrito)) %>%
  group_by(distrito)
    
# sustitución de los valores NA por la media para cada tipo de estado
indicador <- unique(df_EstadoViviendasDist$indicador_completo)

# Itera sobre cada estado de vivienda
for (estado in indicador) {
  df_filtrado <- df_EstadoViviendasDist %>%
    filter(indicador == estado)

  medias <- mean(df_filtrado$valor_indicador, na.rm = TRUE)
  df_EstadoViviendasDist <- df_EstadoViviendasDist %>%
    mutate(valor_indicador = ifelse(indicador == estado & is.na(valor_indicador), medias, valor_indicador))
}

# se añade una columna con el porcentaje de viviendas por cada estado
df_EstadoViviendasDist <- df_EstadoViviendasDist %>%
  group_by(indicador_completo) %>%
  mutate(porcentaje = round(((valor_indicador / sum(valor_indicador)) * 100), digit=2))

name_cols <- c("Cod_Distrito", "Distrito", "Estado_Vivienda", 'Valor_Estado', 'Porcentaje_Viviendas')
colnames(df_EstadoViviendasDist) <- name_cols

# guarda los datos en un fichero csv
write.csv2(df_EstadoViviendasDist, file = 'dataset/df_estado_viviendas_dist.csv')

df1_Dist <- df_EstadoViviendasDist
head(df1_Dist)
## # A tibble: 6 × 5
## # Groups:   Estado_Vivienda [5]
##   Cod_Distrito Distrito   Estado_Vivienda                Valor_Estado Porcenta…¹
##          <int> <chr>      <chr>                                 <dbl>      <dbl>
## 1            1 Centro     Viviendas en estado ruinoso             330       9.18
## 2            1 Centro     Viviendas en estado malo               1725      12.9 
## 3            1 Centro     Viviendas en estado deficiente         7895      11.8 
## 4            1 Centro     Viviendas en estado bueno             74970       5.28
## 5            1 Centro     Estado de la vivienda no costa         1875       6.75
## 6            2 Arganzuela Viviendas en estado ruinoso             540      15.0 
## # … with abbreviated variable name ¹​Porcentaje_Viviendas

3.2 Indicador de Desempleo en los Distritos de Madrid

Tasa de personas paradas por género, distritos y barrios.

# subconjunto datos Desempleo
df_Desempleo <- df_indPob %>%
  filter(str_detect(indicador_nivel1, 'Número de personas paradas')) %>%
  filter(str_detect(indicador_completo, 'Tasa de desempleo en'))

df_Desempleo <- df_Desempleo %>%
  mutate(valor_indicador = as.numeric(gsub(",", ".", valor_indicador)))
## Warning in mask$eval_all_mutate(quo): NAs introducidos por coerción
df_Desempleo$indicador_completo <- str_trim(df_Desempleo$indicador_completo)

head(df_Desempleo)
##   Orden Periodo.panel           ciudad cod_distrito distrito cod_barrio barrio
## 1    70          2019 Ciudad de Madrid           NA                  NA       
## 2    71          2019 Ciudad de Madrid           NA                  NA       
## 3    72          2019 Ciudad de Madrid           NA                  NA       
## 4    74          2019 Ciudad de Madrid           NA                  NA       
## 5    75          2019 Ciudad de Madrid           NA                  NA       
## 6    76          2019 Ciudad de Madrid           NA                  NA       
##    año fecha_indicador                   fuente_indicador
## 1 2020      01/02/2020 Estadística Ayuntamiento de Madrid
## 2 2020      01/02/2020 Estadística Ayuntamiento de Madrid
## 3 2020      01/02/2020 Estadística Ayuntamiento de Madrid
## 4 2020      01/02/2020 Estadística Ayuntamiento de Madrid
## 5 2020      01/02/2020 Estadística Ayuntamiento de Madrid
## 6 2020      01/02/2020 Estadística Ayuntamiento de Madrid
##                       categoría_1                     categoría_2
## 1 Indicadores Población desempleo Indicadores Población desempleo
## 2 Indicadores Población desempleo Indicadores Población desempleo
## 3 Indicadores Población desempleo Indicadores Población desempleo
## 4 Indicadores Población desempleo Indicadores Población desempleo
## 5 Indicadores Población desempleo Indicadores Población desempleo
## 6 Indicadores Población desempleo Indicadores Población desempleo
##             indicador_nivel1 indicador_nivel2          indicador_nivel3
## 1 Número de personas paradas          Mujeres Población de 16 a 24 años
## 2 Número de personas paradas          Mujeres           De 25 a 44 años
## 3 Número de personas paradas          Mujeres           De 45 a 64 años
## 4 Número de personas paradas          Hombres Población de 16 a 24 años
## 5 Número de personas paradas          Hombres           De 25 a 44 años
## 6 Número de personas paradas          Hombres           De 45 a 64 años
##   unidad_indicador                           indicador_completo valor_indicador
## 1             Tasa Tasa de desempleo en mujeres de 16 a 24 años            4.24
## 2             Tasa Tasa de desempleo en mujeres de 25 a 44 años            7.51
## 3             Tasa Tasa de desempleo en mujeres de 45 a 64 años            9.82
## 4             Tasa Tasa de desempleo en hombres de 16 a 24 años            4.40
## 5             Tasa Tasa de desempleo en hombres de 25 a 44 años            6.03
## 6             Tasa Tasa de desempleo en hombres de 45 a 64 años            8.87
# subconjunto registros personas paradas Totales en Madrid
df_DesempleoTotales <- df_Desempleo %>% 
  filter(is.na(cod_distrito)) %>%
  select(ciudad, indicador_nivel2, indicador_completo, valor_indicador) %>%
  group_by(indicador_nivel2) %>%
  mutate(porcentaje = round(valor_indicador / sum(valor_indicador) *100,2))

head(df_DesempleoTotales)
## # A tibble: 6 × 5
## # Groups:   indicador_nivel2 [2]
##   ciudad           indicador_nivel2 indicador_completo           valor…¹ porce…²
##   <chr>            <chr>            <chr>                          <dbl>   <dbl>
## 1 Ciudad de Madrid Mujeres          Tasa de desempleo en mujere…    4.24    5.97
## 2 Ciudad de Madrid Mujeres          Tasa de desempleo en mujere…    7.51   10.6 
## 3 Ciudad de Madrid Mujeres          Tasa de desempleo en mujere…    9.82   13.8 
## 4 Ciudad de Madrid Hombres          Tasa de desempleo en hombre…    4.4     7.06
## 5 Ciudad de Madrid Hombres          Tasa de desempleo en hombre…    6.03    9.67
## 6 Ciudad de Madrid Hombres          Tasa de desempleo en hombre…    8.87   14.2 
## # … with abbreviated variable names ¹​valor_indicador, ²​porcentaje
# subconjunto registros personas paradas Totales en los Distritos de Madrid
df_DesempleoDist <- df_Desempleo %>% 
  filter((is.na(cod_barrio)) & !(is.na(cod_distrito))) %>%
  select(cod_distrito, distrito, indicador_completo, valor_indicador) %>%
  #group_by(distrito, indicador_nivel2)
  group_by(distrito, indicador_completo)

name_cols <- c("Cod_Distrito", "Distrito", "Tasa_Desempleo", 'Valor_Tasa')
colnames(df_DesempleoDist) <- name_cols

# guarda los datos en un fichero csv
write.csv2(df_DesempleoDist, file = 'dataset/df_desempleo_dist.csv')

df2_Dist <- df_DesempleoDist
head(df2_Dist)
## # A tibble: 6 × 4
## # Groups:   Distrito, Tasa_Desempleo [6]
##   Cod_Distrito Distrito Tasa_Desempleo                               Valor_Tasa
##          <int> <chr>    <chr>                                             <dbl>
## 1            1 Centro   Tasa de desempleo en mujeres de 16 a 24 años       2.87
## 2            1 Centro   Tasa de desempleo en mujeres de 25 a 44 años       6.01
## 3            1 Centro   Tasa de desempleo en mujeres de 45 a 64 años       9.91
## 4            1 Centro   Tasa de desempleo en hombres de 16 a 24 años       3.03
## 5            1 Centro   Tasa de desempleo en hombres de 25 a 44 años       5.34
## 6            1 Centro   Tasa de desempleo en hombres de 45 a 64 años      10.2
# subconjunto registros personas paradas Totales en los Barrios de Madrid
df_DesempleoBarr <- df_Desempleo %>% 
  filter(!(is.na(cod_barrio)) & !(is.na(cod_distrito))) %>%
  select(cod_distrito, distrito, cod_barrio, barrio, indicador_nivel2,indicador_completo, valor_indicador) %>%
  group_by(barrio) %>%
  mutate(porcentaje = round(valor_indicador / sum(valor_indicador) *100,2))

write.csv2(df_DesempleoBarr, file = 'dataset/df_desempleo_barr.csv')

head(df_DesempleoBarr)
## # A tibble: 6 × 8
## # Groups:   barrio [1]
##   cod_distrito distrito cod_barrio barrio  indicador_n…¹ indic…² valor…³ porce…⁴
##          <int> <chr>         <int> <chr>   <chr>         <chr>     <dbl>   <dbl>
## 1            1 Centro           11 Palacio Mujeres       Tasa d…    1.67    1.32
## 2            1 Centro           11 Palacio Mujeres       Tasa d…    5.94    4.68
## 3            1 Centro           11 Palacio Mujeres       Tasa d…    9.23    7.27
## 4            1 Centro           11 Palacio Hombres       Tasa d…    3.49    2.75
## 5            1 Centro           11 Palacio Hombres       Tasa d…    6.32    4.98
## 6            1 Centro           11 Palacio Hombres       Tasa d…   10.6     8.36
## # … with abbreviated variable names ¹​indicador_nivel2, ²​indicador_completo,
## #   ³​valor_indicador, ⁴​porcentaje
# gráficas personas paradas por distritos 2020
df1 <- df_Desempleo
ggplot(df1, aes(x = distrito , y = valor_indicador, color = indicador_completo, group = indicador_nivel2)) +
  geom_line() + 
  theme(axis.text.x = element_text(angle = 45, hjust = 1))

3.3 Indicador de Renta en los Distritos de Madrid

Renta media anual.

# subconjunto datos Renta
df_Renta <- df_indPob %>%
  filter(año == '2018') %>%
  filter(str_detect(indicador_nivel1, 'Renta')) %>%
  filter(str_detect(indicador_nivel2, 'Neta anual'))

df_Renta <- df_Renta %>%
  mutate(valor_indicador = as.numeric(gsub(",", ".", valor_indicador)))

df_Renta$indicador_completo <- str_trim(df_Renta$indicador_completo)

head(df_Renta)
##   Orden Periodo.panel           ciudad cod_distrito distrito cod_barrio
## 1 37311          2022 Ciudad de Madrid           NA                  NA
## 2 37528          2022 Ciudad de Madrid            1   Centro         NA
## 3 37707          2022 Ciudad de Madrid            1   Centro         11
## 4 37816          2022 Ciudad de Madrid            1   Centro         12
## 5 37925          2022 Ciudad de Madrid            1   Centro         13
## 6 38034          2022 Ciudad de Madrid            1   Centro         14
##        barrio  año fecha_indicador                   fuente_indicador
## 1             2018            2018 Estadística Ayuntamiento de Madrid
## 2             2018            2018 Estadística Ayuntamiento de Madrid
## 3     Palacio 2018            2018 Estadística Ayuntamiento de Madrid
## 4 Embajadores 2018            2018 Estadística Ayuntamiento de Madrid
## 5      Cortes 2018            2018 Estadística Ayuntamiento de Madrid
## 6    Justicia 2018            2018 Estadística Ayuntamiento de Madrid
##              categoría_1            categoría_2 indicador_nivel1
## 1 Indicadores Económicos Indicadores económicos           Renta 
## 2 Indicadores Económicos Indicadores económicos           Renta 
## 3 Indicadores Económicos Indicadores económicos           Renta 
## 4 Indicadores Económicos Indicadores económicos           Renta 
## 5 Indicadores Económicos Indicadores económicos           Renta 
## 6 Indicadores Económicos Indicadores económicos           Renta 
##   indicador_nivel2 indicador_nivel3 unidad_indicador
## 1       Neta anual                             Renta
## 2       Neta anual                             Renta
## 3       Neta anual                             Renta
## 4       Neta anual                             Renta
## 5       Neta anual                             Renta
## 6       Neta anual                             Renta
##                                    indicador_completo valor_indicador
## 1 Renta neta media anual de los hogares (Urban Audit)          42.283
## 2 Renta neta media anual de los hogares (Urban Audit)          36.072
## 3 Renta neta media anual de los hogares (Urban Audit)          38.974
## 4 Renta neta media anual de los hogares (Urban Audit)          29.472
## 5 Renta neta media anual de los hogares (Urban Audit)          40.963
## 6 Renta neta media anual de los hogares (Urban Audit)          48.203
# subconjunto Renta media anual Totales en Madrid
df_Rentas <- df_Renta %>% 
  filter(is.na(cod_distrito)) %>%
  select(ciudad, indicador_completo, valor_indicador) %>%
  mutate(porcentaje = round(valor_indicador / sum(valor_indicador) *100,2))

head(df_Rentas)
##             ciudad                                  indicador_completo
## 1 Ciudad de Madrid Renta neta media anual de los hogares (Urban Audit)
##   valor_indicador porcentaje
## 1          42.283        100
# subconjunto Renta media anual en los Distritos de Madrid
df_RentaDist <- df_Renta %>% 
  filter((is.na(cod_barrio)) & !(is.na(cod_distrito))) %>%
  select(cod_distrito, distrito, indicador_completo, valor_indicador) %>%
  group_by(distrito)

name_cols <- c("Cod_Distrito", "Distrito", "Renta_Media", 'Valor_Renta')
colnames(df_RentaDist) <- name_cols

write.csv2(df_RentaDist, file = 'dataset/df_renta_dist.csv')

df3_Dist <- df_RentaDist
head(df3_Dist)
## # A tibble: 6 × 4
## # Groups:   Distrito [6]
##   Cod_Distrito Distrito   Renta_Media                                    Valor…¹
##          <int> <chr>      <chr>                                            <dbl>
## 1            1 Centro     Renta neta media anual de los hogares (Urban …    36.1
## 2            2 Arganzuela Renta neta media anual de los hogares (Urban …    43.8
## 3            3 Retiro     Renta neta media anual de los hogares (Urban …    55.8
## 4            4 Salamanca  Renta neta media anual de los hogares (Urban …    61.5
## 5            5 Chamartín  Renta neta media anual de los hogares (Urban …    70.7
## 6            6 Tetuán     Renta neta media anual de los hogares (Urban …    37.6
## # … with abbreviated variable name ¹​Valor_Renta
# subconjunto Renta media anual en los Barrios de Madrid
df_RentaBarr <- df_Renta %>% 
  filter(!(is.na(cod_barrio)) & !(is.na(cod_distrito))) %>%
  select(cod_distrito, distrito, cod_barrio, barrio, indicador_completo, valor_indicador) %>%
  group_by(barrio)

write.csv2(df_RentaBarr, file = 'dataset/df_renta_barr.csv')

head(df_RentaBarr)
## # A tibble: 6 × 6
## # Groups:   barrio [6]
##   cod_distrito distrito cod_barrio barrio      indicador_completo        valor…¹
##          <int> <chr>         <int> <chr>       <chr>                       <dbl>
## 1            1 Centro           11 Palacio     Renta neta media anual d…    39.0
## 2            1 Centro           12 Embajadores Renta neta media anual d…    29.5
## 3            1 Centro           13 Cortes      Renta neta media anual d…    41.0
## 4            1 Centro           14 Justicia    Renta neta media anual d…    48.2
## 5            1 Centro           15 Universidad Renta neta media anual d…    35.3
## 6            1 Centro           16 Sol         Renta neta media anual d…    35.1
## # … with abbreviated variable name ¹​valor_indicador

3.4 Indicador de Edad de la población en los Distritos de Madrid

# subconjunto datos Edad Media
df_Edad <- df_indPob %>%
  filter(año == '2019') %>%
  filter(str_detect(indicador_nivel1, 'Edad Media'))

df_Edad <- df_Edad %>%
  mutate(valor_indicador = as.numeric(gsub(",", ".", valor_indicador)))

df_Edad$indicador_completo <- str_trim(df_Edad$indicador_completo)

head(df_Edad)
##   Orden Periodo.panel           ciudad cod_distrito distrito cod_barrio
## 1     6          2019 Ciudad de Madrid           NA                  NA
## 2   288          2019 Ciudad de Madrid            1   Centro         NA
## 3   514          2019 Ciudad de Madrid            1   Centro         11
## 4   634          2019 Ciudad de Madrid            1   Centro         12
## 5   754          2019 Ciudad de Madrid            1   Centro         13
## 6   874          2019 Ciudad de Madrid            1   Centro         14
##        barrio  año fecha_indicador                   fuente_indicador
## 1             2019      01/01/2019 Estadística Ayuntamiento de Madrid
## 2             2019      01/01/2019 Estadística Ayuntamiento de Madrid
## 3     Palacio 2019      01/01/2019 Estadística Ayuntamiento de Madrid
## 4 Embajadores 2019      01/01/2019 Estadística Ayuntamiento de Madrid
## 5      Cortes 2019      01/01/2019 Estadística Ayuntamiento de Madrid
## 6    Justicia 2019      01/01/2019 Estadística Ayuntamiento de Madrid
##              categoría_1             categoría_2 indicador_nivel1
## 1 Población del distrito Estructura de población       Edad Media
## 2 Población del distrito Estructura de población       Edad Media
## 3 Población del distrito Estructura de población       Edad Media
## 4 Población del distrito Estructura de población       Edad Media
## 5 Población del distrito Estructura de población       Edad Media
## 6 Población del distrito Estructura de población       Edad Media
##   indicador_nivel2 indicador_nivel3 unidad_indicador         indicador_completo
## 1                                               Edad Edad media de la población
## 2                                               Edad Edad media de la población
## 3                                               Edad Edad media de la población
## 4                                               Edad Edad media de la población
## 5                                               Edad Edad media de la población
## 6                                               Edad Edad media de la población
##   valor_indicador
## 1           44.14
## 2           44.09
## 3           45.80
## 4           42.88
## 5           45.02
## 6           44.30
# subconjunto Edad media anual Totales en Madrid
df_Edades <- df_Edad %>% 
  filter(is.na(cod_distrito)) %>%
  select(ciudad, indicador_completo, valor_indicador)

head(df_Edades)
##             ciudad         indicador_completo valor_indicador
## 1 Ciudad de Madrid Edad media de la población           44.14
# subconjunto Edad media anual en los Distritos de Madrid
df_EdadDist <- df_Edad %>% 
  filter((is.na(cod_barrio)) & !(is.na(cod_distrito))) %>%
  select(cod_distrito, distrito, indicador_completo, valor_indicador) %>%
  group_by(distrito)

name_cols <- c("Cod_Distrito", "Distrito", "Edad_Media", 'Valor_Edad')
colnames(df_EdadDist) <- name_cols

write.csv2(df_EdadDist, file = 'dataset/df_edad_dist.csv')

df4_Dist <- df_EdadDist
head(df4_Dist)
## # A tibble: 6 × 4
## # Groups:   Distrito [6]
##   Cod_Distrito Distrito   Edad_Media                 Valor_Edad
##          <int> <chr>      <chr>                           <dbl>
## 1            1 Centro     Edad media de la población       44.1
## 2            2 Arganzuela Edad media de la población       44.6
## 3            3 Retiro     Edad media de la población       47.1
## 4            4 Salamanca  Edad media de la población       46.3
## 5            5 Chamartín  Edad media de la población       45.5
## 6            6 Tetuán     Edad media de la población       44.2
# subconjunto Edad media anual en los Barrios de Madrid
df_EdadBarr <- df_Edad %>% 
  filter(!(is.na(cod_barrio)) & !(is.na(cod_distrito))) %>%
  select(cod_distrito, distrito, cod_barrio, barrio, indicador_completo, valor_indicador) %>%
  group_by(barrio)
  
write.csv2(df_EdadBarr, file = 'dataset/df_edad_barr.csv')

head(df_EdadBarr)
## # A tibble: 6 × 6
## # Groups:   barrio [6]
##   cod_distrito distrito cod_barrio barrio      indicador_completo        valor…¹
##          <int> <chr>         <int> <chr>       <chr>                       <dbl>
## 1            1 Centro           11 Palacio     Edad media de la poblaci…    45.8
## 2            1 Centro           12 Embajadores Edad media de la poblaci…    42.9
## 3            1 Centro           13 Cortes      Edad media de la poblaci…    45.0
## 4            1 Centro           14 Justicia    Edad media de la poblaci…    44.3
## 5            1 Centro           15 Universidad Edad media de la poblaci…    44.0
## 6            1 Centro           16 Sol         Edad media de la poblaci…    44.7
## # … with abbreviated variable name ¹​valor_indicador

3.5 Indicador de Densidad de Población en los Distritos de Madrid

# subconjunto datos Densidad de Población
df_Densidad <- df_indPob %>%
  filter(año == '2020') %>%
  filter(str_detect(indicador_nivel1, 'Densidad de población'))

df_Densidad <- df_Densidad %>%
  mutate(valor_indicador = as.numeric(gsub(",", ".", valor_indicador)))

df_Densidad$indicador_completo <- str_trim(df_Densidad$indicador_completo)

head(df_Densidad)
##   Orden Periodo.panel           ciudad cod_distrito distrito cod_barrio
## 1 20750       2020-21 Ciudad de Madrid           NA                  NA
## 2 21063       2020-21 Ciudad de Madrid            1   Centro         NA
## 3 21279       2020-21 Ciudad de Madrid            1   Centro         11
## 4 21373       2020-21 Ciudad de Madrid            1   Centro         12
## 5 21468       2020-21 Ciudad de Madrid            1   Centro         13
## 6 21554       2020-21 Ciudad de Madrid            1   Centro         14
##        barrio  año fecha_indicador                   fuente_indicador
## 1             2020      01/01/2020 Estadística Ayuntamiento de Madrid
## 2             2020      01/01/2020 Estadística Ayuntamiento de Madrid
## 3     Palacio 2020      01/01/2020 Estadística Ayuntamiento de Madrid
## 4 Embajadores 2020      01/01/2020 Estadística Ayuntamiento de Madrid
## 5      Cortes 2020      01/01/2020 Estadística Ayuntamiento de Madrid
## 6    Justicia 2020      01/01/2020 Estadística Ayuntamiento de Madrid
##                                     categoría_1 categoría_2
## 1 Características Generales del Distrito-Barrio            
## 2 Características Generales del Distrito-Barrio            
## 3 Características Generales del Distrito-Barrio            
## 4 Características Generales del Distrito-Barrio            
## 5 Características Generales del Distrito-Barrio            
## 6 Características Generales del Distrito-Barrio            
##        indicador_nivel1 indicador_nivel2 indicador_nivel3 unidad_indicador
## 1 Densidad de población                                     Habitantes/Ha.
## 2 Densidad de población                                     Habitantes/Ha.
## 3 Densidad de población                                     Habitantes/Ha.
## 4 Densidad de población                                     Habitantes/Ha.
## 5 Densidad de población                                     Habitantes/Ha.
## 6 Densidad de población                                     Habitantes/Ha.
##              indicador_completo valor_indicador
## 1 Población densidad (hab./Ha.)           55.17
## 2 Población densidad (hab./Ha.)          269.00
## 3 Población densidad (hab./Ha.)          161.00
## 4 Población densidad (hab./Ha.)          455.00
## 5 Población densidad (hab./Ha.)          182.00
## 6 Población densidad (hab./Ha.)          244.00
# subconjunto Densidad de Población anual Totales en Madrid
df_Densidades <- df_Densidad %>% 
  filter(is.na(cod_distrito)) %>%
  select(ciudad, indicador_completo, valor_indicador)

head(df_Densidades)
##             ciudad            indicador_completo valor_indicador
## 1 Ciudad de Madrid Población densidad (hab./Ha.)           55.17
# subconjunto Densidad de Población anual en los Distritos de Madrid
df_DensidadDist <- df_Densidad %>% 
  filter((is.na(cod_barrio)) & !(is.na(cod_distrito))) %>%
  select(cod_distrito, distrito, indicador_completo, valor_indicador) %>%
  group_by(distrito)

name_cols <- c("Cod_Distrito", "Distrito", "Densidad_Poblacion", 'Valor_DensidadPob')
colnames(df_DensidadDist) <- name_cols

write.csv2(df_DensidadDist, file = 'dataset/df_densidad_dist.csv')

df5_Dist <- df_DensidadDist
head(df5_Dist)
## # A tibble: 6 × 4
## # Groups:   Distrito [6]
##   Cod_Distrito Distrito   Densidad_Poblacion            Valor_DensidadPob
##          <int> <chr>      <chr>                                     <dbl>
## 1            1 Centro     Población densidad (hab./Ha.)               269
## 2            2 Arganzuela Población densidad (hab./Ha.)               241
## 3            3 Retiro     Población densidad (hab./Ha.)               220
## 4            4 Salamanca  Población densidad (hab./Ha.)               274
## 5            5 Chamartín  Población densidad (hab./Ha.)               161
## 6            6 Tetuán     Población densidad (hab./Ha.)               300
# subconjunto Densidad de Población anual en los Barrios de Madrid
df_DensidadBarr <- df_Densidad %>% 
  filter(!(is.na(cod_barrio)) & !(is.na(cod_distrito))) %>%
  select(cod_distrito, distrito, cod_barrio, barrio, indicador_completo, valor_indicador) %>%
  group_by(barrio)

write.csv2(df_DensidadBarr, file = 'dataset/df_densidad_barr.csv')
  
head(df_DensidadBarr)
## # A tibble: 6 × 6
## # Groups:   barrio [6]
##   cod_distrito distrito cod_barrio barrio      indicador_completo        valor…¹
##          <int> <chr>         <int> <chr>       <chr>                       <dbl>
## 1            1 Centro           11 Palacio     Población densidad (hab.…     161
## 2            1 Centro           12 Embajadores Población densidad (hab.…     455
## 3            1 Centro           13 Cortes      Población densidad (hab.…     182
## 4            1 Centro           14 Justicia    Población densidad (hab.…     244
## 5            1 Centro           15 Universidad Población densidad (hab.…     353
## 6            1 Centro           16 Sol         Población densidad (hab.…     171
## # … with abbreviated variable name ¹​valor_indicador

3.6 Indicador de Seguridad en los Distritos de Madrid

# subconjunto datos Seguridad Ciudadana
df_Seguridad <- df_indPob %>%
  filter(año == '2019') %>%
  filter(str_detect(indicador_nivel2, 'Seguridad'))

df_Seguridad <- df_Seguridad %>%
  mutate(valor_indicador = as.numeric(gsub("\\.", "", valor_indicador)))

df_Seguridad$indicador_completo <- str_trim(df_Seguridad$indicador_completo)

head(df_Seguridad)
##   Orden Periodo.panel           ciudad cod_distrito distrito cod_barrio barrio
## 1   217          2019 Ciudad de Madrid           NA                  NA       
## 2   218          2019 Ciudad de Madrid           NA                  NA       
## 3   219          2019 Ciudad de Madrid           NA                  NA       
## 4   220          2019 Ciudad de Madrid           NA                  NA       
## 5   451          2019 Ciudad de Madrid            1   Centro         NA       
## 6   452          2019 Ciudad de Madrid            1   Centro         NA       
##    año fecha_indicador                                    fuente_indicador
## 1 2019            2019 Portal de datos abiertos del Ayuntamiento de Madrid
## 2 2019            2019 Portal de datos abiertos del Ayuntamiento de Madrid
## 3 2019            2019 Portal de datos abiertos del Ayuntamiento de Madrid
## 4 2019            2019 Portal de datos abiertos del Ayuntamiento de Madrid
## 5 2019            2019 Portal de datos abiertos del Ayuntamiento de Madrid
## 6 2019            2019 Portal de datos abiertos del Ayuntamiento de Madrid
##   categoría_1                          categoría_2         indicador_nivel1
## 1   Seguridad Intervención de la Policía Municipal Número de intervenciones
## 2   Seguridad Intervención de la Policía Municipal Número de intervenciones
## 3   Seguridad Intervención de la Policía Municipal Número de intervenciones
## 4   Seguridad Intervención de la Policía Municipal Número de intervenciones
## 5   Seguridad Intervención de la Policía Municipal Número de intervenciones
## 6   Seguridad Intervención de la Policía Municipal Número de intervenciones
##   indicador_nivel2                            indicador_nivel3 unidad_indicador
## 1        Seguridad Población delitos relacionados con personas   Intervenciones
## 2        Seguridad                   Tenencia ilicita de armas   Intervenciones
## 3        Seguridad                                  Patrimonio   Intervenciones
## 4        Seguridad                Tenencia y consumo de drogas   Intervenciones
## 5        Seguridad Población delitos relacionados con personas   Intervenciones
## 6        Seguridad                   Tenencia ilicita de armas   Intervenciones
##                                                                                                 indicador_completo
## 1            Intervenciones de la Policía Municipal en materia de seguridad: delitos relacionados con las personas
## 2            Intervenciones de la Policía Municipal en materia de seguridad: relacionadas con la tenencia de armas
## 3                   Intervenciones de la Policía Municipal en materia de seguridad: relacionadas con el patrimonio
## 4 Intervenciones de la Policía Municipal en materia de seguridad: relacionadas con la tenencia y consumo de drogas
## 5            Intervenciones de la Policía Municipal en materia de seguridad: delitos relacionados con las personas
## 6            Intervenciones de la Policía Municipal en materia de seguridad: relacionadas con la tenencia de armas
##   valor_indicador
## 1            5455
## 2            1362
## 3            6984
## 4            8346
## 5             943
## 6             716
# subconjunto Seguridad de Población anual Totales en Madrid
df_Seguridades <- df_Seguridad %>% 
  filter(is.na(cod_distrito)) %>%
  select(ciudad, indicador_completo, valor_indicador) %>%
  mutate(porcentaje = round(valor_indicador / sum(valor_indicador) *100,2))

head(df_Seguridades)
##             ciudad
## 1 Ciudad de Madrid
## 2 Ciudad de Madrid
## 3 Ciudad de Madrid
## 4 Ciudad de Madrid
##                                                                                                 indicador_completo
## 1            Intervenciones de la Policía Municipal en materia de seguridad: delitos relacionados con las personas
## 2            Intervenciones de la Policía Municipal en materia de seguridad: relacionadas con la tenencia de armas
## 3                   Intervenciones de la Policía Municipal en materia de seguridad: relacionadas con el patrimonio
## 4 Intervenciones de la Policía Municipal en materia de seguridad: relacionadas con la tenencia y consumo de drogas
##   valor_indicador porcentaje
## 1            5455      24.63
## 2            1362       6.15
## 3            6984      31.53
## 4            8346      37.68
# subconjunto Seguridad de Población anual en los Distritos de Madrid
df_SeguridadDist <- df_Seguridad %>% 
  filter((is.na(cod_barrio)) & !(is.na(cod_distrito))) %>%
  select(cod_distrito, distrito, indicador_completo, valor_indicador) %>%
  group_by(distrito) %>%
  mutate(porcentaje = round(valor_indicador / sum(valor_indicador) *100,2))

name_cols <- c("Cod_Distrito", "Distrito", "Tipo_Intervencion", 'Valor_Intevencion', 'Porcentaje_Intervenciones')
colnames(df_SeguridadDist) <- name_cols

write.csv2(df_SeguridadDist, file = 'dataset/df_seguridad_counts_dist.csv')

df6_Dist <- df_SeguridadDist
head(df6_Dist)
## # A tibble: 6 × 5
## # Groups:   Distrito [2]
##   Cod_Distrito Distrito   Tipo_Intervencion                      Valor…¹ Porce…²
##          <int> <chr>      <chr>                                    <dbl>   <dbl>
## 1            1 Centro     Intervenciones de la Policía Municipa…     943   18.0 
## 2            1 Centro     Intervenciones de la Policía Municipa…     716   13.6 
## 3            1 Centro     Intervenciones de la Policía Municipa…    1439   27.4 
## 4            1 Centro     Intervenciones de la Policía Municipa…    2155   41.0 
## 5            2 Arganzuela Intervenciones de la Policía Municipa…     199   24.5 
## 6            2 Arganzuela Intervenciones de la Policía Municipa…      19    2.34
## # … with abbreviated variable names ¹​Valor_Intevencion,
## #   ²​Porcentaje_Intervenciones
# subconjunto Seguridad de Población anual en los Distritos de Madrid
df_Seguridad_Dist <- df_Seguridad %>% 
  filter((is.na(cod_barrio)) & !(is.na(cod_distrito))) %>%
  select(cod_distrito, distrito, valor_indicador) %>%
  group_by(cod_distrito,distrito) %>%
  summarize(total = sum(valor_indicador), .groups = "drop")

write.csv2(df_Seguridad_Dist, file = 'dataset/df_seguridad_dist.csv')

head(df_Seguridad_Dist)
## # A tibble: 6 × 3
##   cod_distrito distrito   total
##          <int> <chr>      <dbl>
## 1            1 Centro      5253
## 2            2 Arganzuela   811
## 3            3 Retiro       282
## 4            4 Salamanca   1025
## 5            5 Chamartín    438
## 6            6 Tetuán       860

3.7 Indicador de Valores Catastro en los Distritos de Madrid

# subconjunto datos Catastro 
df_Catastro <- df_indPob %>%
  filter(año == '2019') %>%
  filter(str_detect(indicador_nivel1, 'Valor catastral'))

df_Catastro <- df_Catastro %>%
  mutate(valor_indicador = as.numeric(gsub(",", ".", valor_indicador)))

df_Catastro$indicador_completo <- str_trim(df_Catastro$indicador_completo)

head(df_Catastro)
##   Orden Periodo.panel           ciudad cod_distrito distrito cod_barrio  barrio
## 1   192          2019 Ciudad de Madrid           NA                  NA        
## 2   193          2019 Ciudad de Madrid           NA                  NA        
## 3   441          2019 Ciudad de Madrid            1   Centro         NA        
## 4   442          2019 Ciudad de Madrid            1   Centro         NA        
## 5   583          2019 Ciudad de Madrid            1   Centro         11 Palacio
## 6   584          2019 Ciudad de Madrid            1   Centro         11 Palacio
##    año fecha_indicador                   fuente_indicador categoría_1
## 1 2019            2019 Estadística Ayuntamiento de Madrid    Vivienda
## 2 2019            2019 Estadística Ayuntamiento de Madrid    Vivienda
## 3 2019            2019 Estadística Ayuntamiento de Madrid    Vivienda
## 4 2019            2019 Estadística Ayuntamiento de Madrid    Vivienda
## 5 2019            2019 Estadística Ayuntamiento de Madrid    Vivienda
## 6 2019            2019 Estadística Ayuntamiento de Madrid    Vivienda
##   categoría_2 indicador_nivel1   indicador_nivel2 indicador_nivel3
## 1              Valor catastral   Personas físicas                 
## 2              Valor catastral Personas jurídicas                 
## 3              Valor catastral   Personas físicas                 
## 4              Valor catastral Personas jurídicas                 
## 5              Valor catastral   Personas físicas                 
## 6              Valor catastral Personas jurídicas                 
##   unidad_indicador
## 1            Valor
## 2            Valor
## 3            Valor
## 4            Valor
## 5            Valor
## 6            Valor
##                                                                indicador_completo
## 1   Valor catastral medio de los bienes inmuebles: personas físicas en miles de €
## 2 Valor catastral medio de los bienes inmuebles: personas jurídicas en miles de €
## 3   Valor catastral medio de los bienes inmuebles: personas físicas en miles de €
## 4 Valor catastral medio de los bienes inmuebles: personas jurídicas en miles de €
## 5   Valor catastral medio de los bienes inmuebles: personas físicas en miles de €
## 6 Valor catastral medio de los bienes inmuebles: personas jurídicas en miles de €
##   valor_indicador
## 1            90.9
## 2           369.0
## 3           117.0
## 4           593.0
## 5           124.0
## 6           490.0
# subconjunto Catastro Totales en Madrid
df_Catastros <- df_Catastro %>% 
  filter(is.na(cod_distrito)) %>%
  select(ciudad, indicador_completo, valor_indicador)

head(df_Catastros)
##             ciudad
## 1 Ciudad de Madrid
## 2 Ciudad de Madrid
##                                                                indicador_completo
## 1   Valor catastral medio de los bienes inmuebles: personas físicas en miles de €
## 2 Valor catastral medio de los bienes inmuebles: personas jurídicas en miles de €
##   valor_indicador
## 1            90.9
## 2           369.0
# subconjunto Catastro en los Distritos de Madrid
df_CatastroDist <- df_Catastro %>% 
  filter((is.na(cod_barrio)) & !(is.na(cod_distrito))) %>%
  select(cod_distrito, distrito, indicador_completo, valor_indicador) %>%
  group_by(distrito)

name_cols <- c("Cod_Distrito", "Distrito", "Tipo_Catastro", 'Valor_catastro')
colnames(df_CatastroDist) <- name_cols

write.csv2(df_CatastroDist, file = 'dataset/df_catastro_dist.csv')

df7_Dist <- df_CatastroDist
head(df7_Dist)
## # A tibble: 6 × 4
## # Groups:   Distrito [3]
##   Cod_Distrito Distrito   Tipo_Catastro                                  Valor…¹
##          <int> <chr>      <chr>                                            <dbl>
## 1            1 Centro     Valor catastral medio de los bienes inmuebles…   117  
## 2            1 Centro     Valor catastral medio de los bienes inmuebles…   593  
## 3            2 Arganzuela Valor catastral medio de los bienes inmuebles…    84.1
## 4            2 Arganzuela Valor catastral medio de los bienes inmuebles…   297  
## 5            3 Retiro     Valor catastral medio de los bienes inmuebles…   132  
## 6            3 Retiro     Valor catastral medio de los bienes inmuebles…   483  
## # … with abbreviated variable name ¹​Valor_catastro
# subconjunto Catastro en los Barrios de Madrid
df_CatastroBarr <- df_Catastro %>% 
  filter(!(is.na(cod_barrio)) & !(is.na(cod_distrito))) %>%
  select(cod_distrito, distrito, cod_barrio, barrio, indicador_completo, valor_indicador) %>%
  group_by(barrio)

write.csv2(df_CatastroBarr, file = 'dataset/df_catastro_barr.csv')

head(df_CatastroBarr)
## # A tibble: 6 × 6
## # Groups:   barrio [3]
##   cod_distrito distrito cod_barrio barrio      indicador_completo        valor…¹
##          <int> <chr>         <int> <chr>       <chr>                       <dbl>
## 1            1 Centro           11 Palacio     Valor catastral medio de…  124   
## 2            1 Centro           11 Palacio     Valor catastral medio de…  490   
## 3            1 Centro           12 Embajadores Valor catastral medio de…   86.2 
## 4            1 Centro           12 Embajadores Valor catastral medio de…  268   
## 5            1 Centro           13 Cortes      Valor catastral medio de…  147   
## 6            1 Centro           13 Cortes      Valor catastral medio de…    1.06
## # … with abbreviated variable name ¹​valor_indicador

3.8 Indicador de Detenciones en los Distritos de Madrid

# subconjunto datos Detenciones 
df_Detenciones <- df_indPob %>%
  filter(año == '2019') %>%
  filter(str_detect(indicador_nivel1, 'personas detenidas'))

df_Detenciones <- df_Detenciones %>%
  mutate(valor_indicador = as.numeric(gsub(",", ".", valor_indicador)))

df_Detenciones$indicador_completo <- str_trim(df_Detenciones$indicador_completo)

head(df_Detenciones)
##   Orden Periodo.panel           ciudad cod_distrito distrito cod_barrio barrio
## 1   223          2019 Ciudad de Madrid           NA                  NA       
## 2   224          2019 Ciudad de Madrid           NA                  NA       
## 3   225          2019 Ciudad de Madrid           NA                  NA       
## 4   226          2019 Ciudad de Madrid           NA                  NA       
## 5   227          2019 Ciudad de Madrid           NA                  NA       
## 6   228          2019 Ciudad de Madrid           NA                  NA       
##    año fecha_indicador                                    fuente_indicador
## 1 2019            2019 Portal de datos abiertos del Ayuntamiento de Madrid
## 2 2019            2019 Portal de datos abiertos del Ayuntamiento de Madrid
## 3 2019            2019 Portal de datos abiertos del Ayuntamiento de Madrid
## 4 2019            2019 Portal de datos abiertos del Ayuntamiento de Madrid
## 5 2019            2019 Portal de datos abiertos del Ayuntamiento de Madrid
## 6 2019            2019 Portal de datos abiertos del Ayuntamiento de Madrid
##   categoría_1                                                 categoría_2
## 1   Seguridad Población detenidos e investigados por la Policía Municipal
## 2   Seguridad   Población detenida e investigada por la Policía Municipal
## 3   Seguridad Población detenidos e investigados por la Policía Municipal
## 4   Seguridad   Población detenida e investigada por la Policía Municipal
## 5   Seguridad   Población detenida e investigada por la Policía Municipal
## 6   Seguridad   Población detenida e investigada por la Policía Municipal
##               indicador_nivel1                indicador_nivel2 indicador_nivel3
## 1 Número de personas detenidas                                                 
## 2 Número de personas detenidas                        Lesiones                 
## 3 Número de personas detenidas Violencia doméstica y de género                 
## 4 Número de personas detenidas          Malos tratos a menores                 
## 5 Número de personas detenidas    Abusos y agresiones sexuales                 
## 6 Número de personas detenidas                          Hurtos                 
##     unidad_indicador
## 1 Personas detenidas
## 2 Personas detenidas
## 3 Personas detenidas
## 4 Personas detenidas
## 5 Personas detenidas
## 6 Personas detenidas
##                                                                                                             indicador_completo
## 1 Personas detenidas e investigadas por la Policía Municipal en materia de seguridad: Total  personas detenidas e investigadas
## 2                                Personas detenidas e investigadas por la Policía Municipal  en materia de seguridad: Lesiones
## 3         Personas detenidas e investigadas por la Policía Municipal  en materia de seguridad: Violencia doméstica y de género
## 4                  Personas detenidas e investigadas por la Policía Municipal  en materia de seguridad: Malos tratos a menores
## 5            Personas detenidas e investigadas por la Policía Municipal  en materia de seguridad: Abusos y agresiones sexuales
## 6                                  Personas detenidas e investigadas por la Policía Municipal  en materia de seguridad: Hurtos
##   valor_indicador
## 1           9.265
## 2         433.000
## 3         773.000
## 4         103.000
## 5          49.000
## 6           1.193
# subconjunto Detenciones Totales en Madrid
df_Detencioness <- df_Detenciones %>% 
  filter(is.na(cod_distrito)) %>%
  select(ciudad, indicador_nivel2,indicador_completo, valor_indicador)

head(df_Detencioness)
##             ciudad                indicador_nivel2
## 1 Ciudad de Madrid                                
## 2 Ciudad de Madrid                        Lesiones
## 3 Ciudad de Madrid Violencia doméstica y de género
## 4 Ciudad de Madrid          Malos tratos a menores
## 5 Ciudad de Madrid    Abusos y agresiones sexuales
## 6 Ciudad de Madrid                          Hurtos
##                                                                                                             indicador_completo
## 1 Personas detenidas e investigadas por la Policía Municipal en materia de seguridad: Total  personas detenidas e investigadas
## 2                                Personas detenidas e investigadas por la Policía Municipal  en materia de seguridad: Lesiones
## 3         Personas detenidas e investigadas por la Policía Municipal  en materia de seguridad: Violencia doméstica y de género
## 4                  Personas detenidas e investigadas por la Policía Municipal  en materia de seguridad: Malos tratos a menores
## 5            Personas detenidas e investigadas por la Policía Municipal  en materia de seguridad: Abusos y agresiones sexuales
## 6                                  Personas detenidas e investigadas por la Policía Municipal  en materia de seguridad: Hurtos
##   valor_indicador
## 1           9.265
## 2         433.000
## 3         773.000
## 4         103.000
## 5          49.000
## 6           1.193
# subconjunto Total Detenciones en los Distritos de Madrid
df_DetencionesTotalesDist <- df_Detenciones %>% 
  filter((is.na(cod_barrio)) & !(is.na(cod_distrito))) %>%
  select(cod_distrito, distrito, valor_indicador) %>%
  group_by(distrito)

name_cols <- c("Cod_Distrito", "Distrito", 'Valor_Detenciones')
colnames(df_DetencionesTotalesDist) <- name_cols

write.csv2(df_DetencionesTotalesDist, file = 'dataset/df_detencionesTotales_dist.csv')

df8_Dist <- df_DetencionesTotalesDist
head(df8_Dist)
## # A tibble: 6 × 3
## # Groups:   Distrito [6]
##   Cod_Distrito Distrito   Valor_Detenciones
##          <int> <chr>                  <dbl>
## 1            1 Centro                  1.85
## 2            2 Arganzuela            291   
## 3            3 Retiro                177   
## 4            4 Salamanca             693   
## 5            5 Chamartín             314   
## 6            6 Tetuán                502

3.9 Indicador de calidad de vida

# subconjunto datos calidad de vida en los distritos
df_CalidadVida <- df_indPob %>%
  filter(año == '2019') %>%
  filter(fuente_indicador =='Encuesta de calidad de vida y satisfacción con los Servicios Públicos de Madrid 2019') %>%
  filter(str_detect(indicador_completo, 'Calidad de vida actual en su barrio '))

df_CalidadVida <- df_CalidadVida %>%
  mutate(valor_indicador = as.numeric(gsub(",", ".", valor_indicador)))

df_CalidadVida$indicador_completo <- str_trim(df_CalidadVida$indicador_completo)

head(df_CalidadVida)
##   Orden Periodo.panel           ciudad cod_distrito   distrito cod_barrio
## 1   128          2019 Ciudad de Madrid           NA                    NA
## 2   402          2019 Ciudad de Madrid            1     Centro         NA
## 3  1348          2019 Ciudad de Madrid            2 Arganzuela         NA
## 4  2414          2019 Ciudad de Madrid            3     Retiro         NA
## 5  3360          2019 Ciudad de Madrid            4  Salamanca         NA
## 6  4306          2019 Ciudad de Madrid            5  Chamartín         NA
##   barrio  año fecha_indicador
## 1        2019            2019
## 2        2019            2019
## 3        2019            2019
## 4        2019            2019
## 5        2019            2019
## 6        2019            2019
##                                                                       fuente_indicador
## 1 Encuesta de calidad de vida y satisfacción con los Servicios Públicos de Madrid 2019
## 2 Encuesta de calidad de vida y satisfacción con los Servicios Públicos de Madrid 2019
## 3 Encuesta de calidad de vida y satisfacción con los Servicios Públicos de Madrid 2019
## 4 Encuesta de calidad de vida y satisfacción con los Servicios Públicos de Madrid 2019
## 5 Encuesta de calidad de vida y satisfacción con los Servicios Públicos de Madrid 2019
## 6 Encuesta de calidad de vida y satisfacción con los Servicios Públicos de Madrid 2019
##       categoría_1                      categoría_2   indicador_nivel1
## 1 Calidad de vida Calidad de vida y agenda pública Número de personas
## 2 Calidad de vida Calidad de vida y agenda pública Número de personas
## 3 Calidad de vida Calidad de vida y agenda pública Número de personas
## 4 Calidad de vida Calidad de vida y agenda pública Número de personas
## 5 Calidad de vida Calidad de vida y agenda pública Número de personas
## 6 Calidad de vida Calidad de vida y agenda pública Número de personas
##     indicador_nivel2 indicador_nivel3 unidad_indicador
## 1 Vivir en el barrio                        Porcentaje
## 2 Vivir en el barrio                        Porcentaje
## 3 Vivir en el barrio                        Porcentaje
## 4 Vivir en el barrio                        Porcentaje
## 5 Vivir en el barrio                        Porcentaje
## 6 Vivir en el barrio                        Porcentaje
##                    indicador_completo valor_indicador
## 1 Calidad de vida actual en su barrio            71.3
## 2 Calidad de vida actual en su barrio            73.6
## 3 Calidad de vida actual en su barrio            77.9
## 4 Calidad de vida actual en su barrio            80.3
## 5 Calidad de vida actual en su barrio            77.5
## 6 Calidad de vida actual en su barrio            80.5
# subconjunto calidad de vida Total en Madrid
df_CalidadesVida <- df_CalidadVida %>% 
  filter(is.na(cod_distrito)) %>%
  select(ciudad, indicador_completo, valor_indicador)

head(df_CalidadesVida)
##             ciudad                  indicador_completo valor_indicador
## 1 Ciudad de Madrid Calidad de vida actual en su barrio            71.3
# subconjunto Calidad de Vida en los Distritos de Madrid
df_CalidadVidaDist <- df_CalidadVida %>% 
  filter((is.na(cod_barrio)) & !(is.na(cod_distrito))) %>%
  select(cod_distrito, distrito, indicador_completo, valor_indicador) %>%
  group_by(distrito)

name_cols <- c("Cod_Distrito", "Distrito", "Calidad_Vida", 'Valor_calidadVida')
colnames(df_CalidadVidaDist) <- name_cols

write.csv2(df_CalidadVidaDist, file = 'dataset/df_calidad_vida_dist.csv')

df9_Dist <- df_CalidadVidaDist
head(df9_Dist)
## # A tibble: 6 × 4
## # Groups:   Distrito [6]
##   Cod_Distrito Distrito   Calidad_Vida                        Valor_calidadVida
##          <int> <chr>      <chr>                                           <dbl>
## 1            1 Centro     Calidad de vida actual en su barrio              73.6
## 2            2 Arganzuela Calidad de vida actual en su barrio              77.9
## 3            3 Retiro     Calidad de vida actual en su barrio              80.3
## 4            4 Salamanca  Calidad de vida actual en su barrio              77.5
## 5            5 Chamartín  Calidad de vida actual en su barrio              80.5
## 6            6 Tetuán     Calidad de vida actual en su barrio              67.1

3.10 Indicador de percepción de seguridad en la noche

# subconjunto datos percepción de seguridad en la noche en los distritos
df_PercepcionSeguridad <- df_indPob %>%
  filter(año == '2019') %>%
  filter(indicador_nivel2 =='Percepción seguridad') %>%
  filter(str_detect(indicador_completo, 'Percepción de seguridad en el barrio por la noche'))

df_PercepcionSeguridad <- df_PercepcionSeguridad %>%
  mutate(valor_indicador = as.numeric(gsub(",", ".", valor_indicador)))

df_PercepcionSeguridad$indicador_completo <- str_trim(df_PercepcionSeguridad$indicador_completo)

head(df_PercepcionSeguridad)
##   Orden Periodo.panel           ciudad cod_distrito   distrito cod_barrio
## 1 20941       2020-21 Ciudad de Madrid           NA                    NA
## 2 21204       2020-21 Ciudad de Madrid            1     Centro         NA
## 3 21970       2020-21 Ciudad de Madrid            2 Arganzuela         NA
## 4 22801       2020-21 Ciudad de Madrid            3     Retiro         NA
## 5 23544       2020-21 Ciudad de Madrid            4  Salamanca         NA
## 6 24272       2020-21 Ciudad de Madrid            5  Chamartín         NA
##   barrio  año fecha_indicador
## 1        2019            2019
## 2        2019            2019
## 3        2019            2019
## 4        2019            2019
## 5        2019            2019
## 6        2019            2019
##                                                                       fuente_indicador
## 1 Encuesta de calidad de vida y satisfacción con los Servicios Públicos de Madrid 2019
## 2 Encuesta de calidad de vida y satisfacción con los Servicios Públicos de Madrid 2019
## 3 Encuesta de calidad de vida y satisfacción con los Servicios Públicos de Madrid 2019
## 4 Encuesta de calidad de vida y satisfacción con los Servicios Públicos de Madrid 2019
## 5 Encuesta de calidad de vida y satisfacción con los Servicios Públicos de Madrid 2019
## 6 Encuesta de calidad de vida y satisfacción con los Servicios Públicos de Madrid 2019
##       categoría_1                categoría_2   indicador_nivel1
## 1 Calidad de vida Percepción de la seguridad Número de personas
## 2 Calidad de vida Percepción de la seguridad Número de personas
## 3 Calidad de vida Percepción de la seguridad Número de personas
## 4 Calidad de vida Percepción de la seguridad Número de personas
## 5 Calidad de vida Percepción de la seguridad Número de personas
## 6 Calidad de vida Percepción de la seguridad Número de personas
##       indicador_nivel2 indicador_nivel3 unidad_indicador
## 1 Percepción seguridad                        Porcentaje
## 2 Percepción seguridad                        Porcentaje
## 3 Percepción seguridad                        Porcentaje
## 4 Percepción seguridad                        Porcentaje
## 5 Percepción seguridad                        Porcentaje
## 6 Percepción seguridad                        Porcentaje
##                                  indicador_completo valor_indicador
## 1 Percepción de seguridad en el barrio por la noche            60.2
## 2 Percepción de seguridad en el barrio por la noche            69.8
## 3 Percepción de seguridad en el barrio por la noche            68.6
## 4 Percepción de seguridad en el barrio por la noche            66.6
## 5 Percepción de seguridad en el barrio por la noche            73.0
## 6 Percepción de seguridad en el barrio por la noche            73.0
# subconjunto calidad de vida Total en Madrid
df_PercepcionesSeguridad <- df_PercepcionSeguridad %>% 
  filter(is.na(cod_distrito)) %>%
  select(ciudad, indicador_completo, valor_indicador)

head(df_PercepcionesSeguridad)
##             ciudad                                indicador_completo
## 1 Ciudad de Madrid Percepción de seguridad en el barrio por la noche
##   valor_indicador
## 1            60.2
# subconjunto Calidad de Vida en los Distritos de Madrid
df_PercepcionSeguridadDist <- df_PercepcionSeguridad %>% 
  filter((is.na(cod_barrio)) & !(is.na(cod_distrito))) %>%
  select(cod_distrito, distrito, indicador_completo, valor_indicador) %>%
  group_by(distrito)

name_cols <- c("Cod_Distrito", "Distrito", "Percepcion_Seguridad", 'Valor_PercepcionSeguridad')
colnames(df_PercepcionSeguridadDist) <- name_cols

write.csv2(df_PercepcionSeguridadDist, file = 'dataset/df_percepcion_seguridad_noche_dist.csv')

df10_Dist <- df_PercepcionSeguridadDist
head(df10_Dist)
## # A tibble: 6 × 4
## # Groups:   Distrito [6]
##   Cod_Distrito Distrito   Percepcion_Seguridad                           Valor…¹
##          <int> <chr>      <chr>                                            <dbl>
## 1            1 Centro     Percepción de seguridad en el barrio por la n…    69.8
## 2            2 Arganzuela Percepción de seguridad en el barrio por la n…    68.6
## 3            3 Retiro     Percepción de seguridad en el barrio por la n…    66.6
## 4            4 Salamanca  Percepción de seguridad en el barrio por la n…    73  
## 5            5 Chamartín  Percepción de seguridad en el barrio por la n…    73  
## 6            6 Tetuán     Percepción de seguridad en el barrio por la n…    60.4
## # … with abbreviated variable name ¹​Valor_PercepcionSeguridad

4 Datos de alquileres vacacionesles de Airbnb


# Carga y procesado de los datos de AIRBNB en Madrid

df_airbnb <- read.csv("DataSet/airbnb_listings.csv", sep = ";", dec = ".")

str(df_airbnb)
## 'data.frame':    24828 obs. of  20 variables:
##  $ id                            : chr  "4879291" "18071804" "24508884" "34702469" ...
##  $ name                          : chr  "Rental unit in Madrid _*4.83 _1 bedroom _1 bed _1.5 baths" "Rental unit in Madrid _*5.0 _2 bedrooms _2 beds _1 bath" "Rental unit in Madrid _*4.86 _1 bedroom _1 bed _1.5 baths" "Home in Madrid _1 bedroom _1 bed _1 shared bath" ...
##  $ host_id                       : int  5704937 4977064 185146981 177027976 262172537 279178673 300543178 301468492 86526540 253872613 ...
##  $ host_name                     : chr  "Bea" "Alberto" "Jose" "Valentina" ...
##  $ cod_distrito                  : int  11 11 11 11 11 11 11 11 11 11 ...
##  $ distrito                      : chr  "Carabanchel" "Carabanchel" "Carabanchel" "Carabanchel" ...
##  $ cod_barrio                    : logi  NA NA NA NA NA NA ...
##  $ barrio                        : chr  "Abrantes" "Abrantes" "Abrantes" "Abrantes" ...
##  $ latitude                      : chr  "4037538" "4038263" "4038478" "4037947" ...
##  $ longitude                     : chr  "-373353" "-372689" "-372277" "-372895" ...
##  $ room_type                     : chr  "Entire home/apt" "Entire home/apt" "Private room" "Private room" ...
##  $ price                         : int  60 18 20 100 820 60 75 24 21 107 ...
##  $ minimum_nights                : int  7 1 3 1 3 2 7 3 9 2 ...
##  $ number_of_reviews             : int  30 10 43 0 0 1 0 36 16 10 ...
##  $ last_review                   : chr  "09/06/2019" "12/02/2018" "29/11/2022" "" ...
##  $ reviews_per_month             : int  28 13 66 NA NA 2 NA 76 35 54 ...
##  $ calculated_host_listings_count: int  1 1 1 1 1 1 1 1 1 1 ...
##  $ availability_365              : int  265 0 39 0 0 0 0 67 189 0 ...
##  $ number_of_reviews_ltm         : int  0 0 4 0 0 0 0 13 4 3 ...
##  $ license                       : chr  "" "" "" "" ...
# número de alquileres vacacionales disponibles por distrito

df_airbnb_Dist <- df_airbnb %>% 
  select(cod_distrito, distrito, host_id) %>%
  group_by(cod_distrito, distrito) %>%
  summarize(numero_alquileres = n(), .groups = "drop")

name_cols <- c("Cod_Distrito", "Distrito", 'Alquileres')
colnames(df_airbnb_Dist) <- name_cols  

write.csv2(df_airbnb_Dist, file = 'dataset/df_airbnb_dist.csv')

df_airbnb_Dist
## # A tibble: 21 × 3
##    Cod_Distrito Distrito            Alquileres
##           <int> <chr>                    <int>
##  1            1 Centro                   10607
##  2            2 Arganzuela                1247
##  3            3 Retiro                     864
##  4            4 Salamanca                 1708
##  5            5 Chamartín                  730
##  6            6 Tetuán                    1326
##  7            7 Chamberí                  1645
##  8            8 Fuencarral-El Pardo        355
##  9            9 Moncloa-Aravaca            684
## 10           10 Latina                     720
## # … with 11 more rows
# número de alquileres vacacionales disponibles por distrito

# agrupar por distritos, contar y ordenar
df_airbnb_counts_dist <- df_airbnb %>%
  group_by(distrito) %>%
  tally(sort = FALSE) %>%
  mutate(percent = round(100* n / sum(n),2))

write.csv2(df_airbnb_counts_dist, file = 'dataset/df_airbnb_counts_dist.csv')

df_airbnb_counts_dist
## # A tibble: 21 × 3
##    distrito                n percent
##    <chr>               <int>   <dbl>
##  1 Arganzuela           1247    5.02
##  2 Barajas               176    0.71
##  3 Carabanchel           889    3.58
##  4 Centro              10607   42.7 
##  5 Chamartín             730    2.94
##  6 Chamberí             1645    6.63
##  7 Ciudad Lineal         818    3.29
##  8 Fuencarral-El Pardo   355    1.43
##  9 Hortaleza             529    2.13
## 10 Latina                720    2.9 
## # … with 11 more rows
# número de alquileres vacacionales disponibles por Barrio
# agrupar por Barrios, contar y ordenar
df_airbnb_counts_barr <- df_airbnb %>%
  group_by(barrio) %>%
  tally(sort = TRUE) %>%
  mutate(percent = round(100* n / sum(n),2))

write.csv2(df_airbnb_counts_barr, file = 'dataset/df_airbnb_barr.csv')

df_airbnb_counts_barr
## # A tibble: 126 × 3
##    barrio                   n percent
##    <chr>                <int>   <dbl>
##  1 Embajadores           2940   11.8 
##  2 Universidad           2277    9.17
##  3 Palacio               1813    7.3 
##  4 Sol                   1287    5.18
##  5 Justicia              1249    5.03
##  6 Cortes                1041    4.19
##  7 Trafalgar              527    2.12
##  8 Palos de la Frontera   406    1.64
##  9 Goya                   405    1.63
## 10 Guindalera             393    1.58
## # … with 116 more rows

5 Generación del dataset


# generación del conjunto de datos a partir de los subconjuntos obtenidos
rm(df_aux)
## Warning in rm(df_aux): objeto 'df_aux' no encontrado
df_aux <- merge(df3_Dist, df4_Dist, by = c('Cod_Distrito', 'Distrito'), all = TRUE)
df_aux <- merge(df_aux, df5_Dist, by = c('Cod_Distrito', 'Distrito'), all = TRUE)
df_aux <- merge(df_aux, df8_Dist, by = c('Cod_Distrito', 'Distrito'), all = TRUE)
df_aux <- merge(df_aux, df9_Dist, by = c('Cod_Distrito', 'Distrito'), all = TRUE)
df_aux <- merge(df_aux, df10_Dist, by = c('Cod_Distrito', 'Distrito'), all = TRUE)

columnas_a_quitar <-c ('Renta_Media', 'Edad_Media', 'Densidad_Poblacion', 'Calidad_Vida', 'Percepcion_Seguridad')
df_aux <- df_aux %>%
  select(-one_of(columnas_a_quitar))
head(df_aux)
##   Cod_Distrito           Distrito Valor_Renta Valor_Edad Valor_DensidadPob
## 1            1             Centro      36.072      44.09               269
## 2           10             Latina      31.872      46.55                95
## 3           11        Carabanchel      29.842      43.53               185
## 4           12              Usera      27.674      42.34               184
## 5           13 Puente de Vallecas      26.652      43.30               161
## 6           14          Moratalaz      36.755      47.61               157
##   Valor_Detenciones Valor_calidadVida Valor_PercepcionSeguridad
## 1             1.852              73.6                      69.8
## 2           350.000              68.6                      54.4
## 3           630.000              66.2                      49.1
## 4           362.000              61.8                      44.9
## 5             1.109              60.0                      46.8
## 6           125.000              76.4                      61.0
# incorporar el resto de subconjuntos

# tasas de desempleo. Subdividido en Hombres/Mujeres y Tramos de Edad
df_pivoted <- df2_Dist %>%
  group_by(Cod_Distrito, Distrito, Tasa_Desempleo) %>%
  summarise(valor_medio = round(mean(Valor_Tasa, na.rm = TRUE), digits = 2)) %>%
  pivot_wider(names_from = Tasa_Desempleo, values_from = valor_medio)
## `summarise()` has grouped output by 'Cod_Distrito', 'Distrito'. You can
## override using the `.groups` argument.
df_aux <- merge(df_aux, df_pivoted, by = c('Cod_Distrito', 'Distrito'), all = TRUE)

# intervenciones de la policía local por tipología de intervención
df_pivoted <- df6_Dist %>%
  group_by(Cod_Distrito, Distrito, Tipo_Intervencion) %>%
  summarise(valor_medio = round(mean(Valor_Intevencion, na.rm = TRUE), digits = 2)) %>%
  pivot_wider(names_from = Tipo_Intervencion, values_from = valor_medio)
## `summarise()` has grouped output by 'Cod_Distrito', 'Distrito'. You can
## override using the `.groups` argument.
df_aux <- merge(df_aux, df_pivoted, by = c('Cod_Distrito', 'Distrito'), all = TRUE)

# valores catastrales. Subdividido en tipo de persona
df_pivoted <- df7_Dist %>%
  group_by(Cod_Distrito, Distrito, Tipo_Catastro) %>%
  summarise(valor_medio = round(mean(Valor_catastro, na.rm = TRUE), digits = 2)) %>%
  pivot_wider(names_from = Tipo_Catastro, values_from = valor_medio)
## `summarise()` has grouped output by 'Cod_Distrito', 'Distrito'. You can
## override using the `.groups` argument.
df_aux <- merge(df_aux, df_pivoted, by = c('Cod_Distrito', 'Distrito'), all = TRUE)

# estado de las viviendas. 
df_pivoted <- df1_Dist %>%
  group_by(Cod_Distrito, Distrito, Estado_Vivienda) %>%
  summarise(valor_medio = round(mean(Valor_Estado, na.rm = TRUE), digits = 2)) %>%
  pivot_wider(names_from = Estado_Vivienda, values_from = valor_medio)
## `summarise()` has grouped output by 'Cod_Distrito', 'Distrito'. You can
## override using the `.groups` argument.
df_aux <- merge(df_aux, df_pivoted, by = c('Cod_Distrito', 'Distrito'), all = TRUE)

# incroporar los datos de airbnb
df_aux <- merge(df_aux, df_airbnb_Dist, by = c('Cod_Distrito', 'Distrito'), all = TRUE)
# se carga la variable Target.
# 0 si el distrito pierde habitantes, 1 si no pierde habitantes
df_Target <- read.csv2('df/df_target.csv')

#se añade al dataframe
df_aux <- merge(df_aux, df_Target, by = c('Cod_Distrito', 'Distrito'), all = TRUE)
# se renombran las columnas

columnas <- c('Cod_Distrito', 'Distrito', 'Renta_Media', 'Edad_Media', 'Densidad_Pob', 'Num_Detenciones', 'Calidad_Vida', 'Percepcion_seguridad', 'Tasa_Desem_H_16_24', 'Tasa_Desem_H_25_44', 'Tasa_Desem_H_45_64', 'Tasa_Desem_M_16_24', 'Tasa_Desem_M_25_44', 'Tasa_Desem_M_45_64', 'Num_Delitos_Perso', 'Num_Delitos_Pat', 'Num_Delitos_Armas', 'Num_Delitos_Drogas', 'Valor_Cat_Fisicas', 'Valor_Cat_Juridicas', 'Vivienda_NoConsta', 'Vivienda_Bueno', 'Vivienda_Deficiente', 'Vivienda_Malo', 'Vivienda_Ruina', 'Num_Alquileres_Airbnb', 'Target')

colnames(df_aux) <- columnas

write.csv2(df_aux, file = 'df/dataset.csv')
head(df_aux)
##   Cod_Distrito           Distrito Renta_Media Edad_Media Densidad_Pob
## 1            1             Centro      36.072      44.09          269
## 2           10             Latina      31.872      46.55           95
## 3           11        Carabanchel      29.842      43.53          185
## 4           12              Usera      27.674      42.34          184
## 5           13 Puente de Vallecas      26.652      43.30          161
## 6           14          Moratalaz      36.755      47.61          157
##   Num_Detenciones Calidad_Vida Percepcion_seguridad Tasa_Desem_H_16_24
## 1           1.852         73.6                 69.8               3.68
## 2         350.000         68.6                 54.4               5.61
## 3         630.000         66.2                 49.1               6.40
## 4         362.000         61.8                 44.9               7.03
## 5           1.109         60.0                 46.8               7.80
## 6         125.000         76.4                 61.0               5.18
##   Tasa_Desem_H_25_44 Tasa_Desem_H_45_64 Tasa_Desem_M_16_24 Tasa_Desem_M_25_44
## 1               6.00              11.11               3.22               6.81
## 2               7.98              10.59               5.39               9.74
## 3               8.49              11.09               6.41              10.70
## 4               9.04              11.44               7.88              11.74
## 5               9.88              13.03               7.74              12.91
## 6               7.88               9.67               5.33               9.97
##   Tasa_Desem_M_45_64 Num_Delitos_Perso Num_Delitos_Pat Num_Delitos_Armas
## 1              10.83               943            1439               716
## 2              11.64               157             185                29
## 3              12.38               376             296                49
## 4              13.12               272             310                25
## 5              13.52               359             389               142
## 6              11.08                67             101                21
##   Num_Delitos_Drogas Valor_Cat_Fisicas Valor_Cat_Juridicas Vivienda_NoConsta
## 1               2155             117.0                 593              1875
## 2                214              61.5                 232              1735
## 3                345              52.8                 142              4135
## 4                335              50.5                 169              1255
## 5                531              43.7                  99              2285
## 6                122              82.5                 248               140
##   Vivienda_Bueno Vivienda_Deficiente Vivienda_Malo Vivienda_Ruina
## 1          74970                7895        1725.0            330
## 2         107455                5245         810.0            250
## 3         103880                6090        1035.0            125
## 4          54565                2715         370.0            380
## 5          92170                9785        1880.0            470
## 6          43755                 415         635.5             95
##   Num_Alquileres_Airbnb Target
## 1                 10607      0
## 2                   720      1
## 3                   889      1
## 4                   606      0
## 5                   719      1
## 6                   186      1

6 Preparación del dataset


6.1 Carga del dataset

# carga del conjunto de datos
df <- read.csv2('df/dataset.csv')
str(df)
## 'data.frame':    21 obs. of  28 variables:
##  $ X                    : int  1 2 3 4 5 6 7 8 9 10 ...
##  $ Cod_Distrito         : int  1 10 11 12 13 14 15 16 17 18 ...
##  $ Distrito             : chr  "Centro" "Latina" "Carabanchel" "Usera" ...
##  $ Renta_Media          : num  36.1 31.9 29.8 27.7 26.7 ...
##  $ Edad_Media           : num  44.1 46.5 43.5 42.3 43.3 ...
##  $ Densidad_Pob         : num  269 95 185 184 161 ...
##  $ Num_Detenciones      : num  1.85 350 630 362 1.11 ...
##  $ Calidad_Vida         : num  73.6 68.6 66.2 61.8 60 76.4 69.5 75.7 56.3 69 ...
##  $ Percepcion_seguridad : num  69.8 54.4 49.1 44.9 46.8 61 56.1 60.9 41.6 52.5 ...
##  $ Tasa_Desem_H_16_24   : num  3.68 5.61 6.4 7.03 7.8 5.18 3.79 3.43 7.69 7.69 ...
##  $ Tasa_Desem_H_25_44   : num  6 7.98 8.49 9.04 9.88 7.88 6.36 5.13 9.46 7.21 ...
##  $ Tasa_Desem_H_45_64   : num  11.1 10.6 11.1 11.4 13 ...
##  $ Tasa_Desem_M_16_24   : num  3.22 5.39 6.41 7.88 7.74 5.33 3.63 2.85 7.77 8.31 ...
##  $ Tasa_Desem_M_25_44   : num  6.81 9.74 10.7 11.74 12.91 ...
##  $ Tasa_Desem_M_45_64   : num  10.8 11.6 12.4 13.1 13.5 ...
##  $ Num_Delitos_Perso    : int  943 157 376 272 359 67 344 97 216 159 ...
##  $ Num_Delitos_Pat      : int  1439 185 296 310 389 101 374 103 259 351 ...
##  $ Num_Delitos_Armas    : int  716 29 49 25 142 21 49 26 27 39 ...
##  $ Num_Delitos_Drogas   : int  2155 214 345 335 531 122 423 129 286 390 ...
##  $ Valor_Cat_Fisicas    : num  117 61.5 52.8 50.5 43.7 82.5 83.8 108 52.8 62 ...
##  $ Valor_Cat_Juridicas  : int  593 232 142 169 99 248 292 281 142 139 ...
##  $ Vivienda_NoConsta    : int  1875 1735 4135 1255 2285 140 1230 2170 1535 800 ...
##  $ Vivienda_Bueno       : int  74970 107455 103880 54565 92170 43755 97780 70310 55445 41730 ...
##  $ Vivienda_Deficiente  : int  7895 5245 6090 2715 9785 415 2385 1600 3655 775 ...
##  $ Vivienda_Malo        : num  1725 810 1035 370 1880 ...
##  $ Vivienda_Ruina       : num  330 250 125 380 470 95 85 120 140 40 ...
##  $ Num_Alquileres_Airbnb: int  10607 720 889 606 719 186 818 529 252 120 ...
##  $ Target               : int  0 1 1 0 1 1 1 1 1 1 ...
# se excluyen las columnas no necesarias
df_clust <- df[-c(1:3)]
#df_clust <- df_clust[-df_clust$Target]
df_clust
##    Renta_Media Edad_Media Densidad_Pob Num_Detenciones Calidad_Vida
## 1       36.072      44.09       269.00           1.852         73.6
## 2       31.872      46.55        95.00         350.000         68.6
## 3       29.842      43.53       185.00         630.000         66.2
## 4       27.674      42.34       184.00         362.000         61.8
## 5       26.652      43.30       161.00           1.109         60.0
## 6       36.755      47.61       157.00         125.000         76.4
## 7       39.425      45.87       192.00         509.000         69.5
## 8       52.944      42.35        70.48         221.000         75.7
## 9       28.407      42.15        76.44         411.000         56.3
## 10      32.765      38.90        22.25         333.000         69.0
## 11      33.870      40.83        21.00          78.000         72.1
## 12      43.789      44.63       241.00         291.000         77.9
## 13      37.112      43.22        72.32         396.000         70.3
## 14      49.615      41.79        11.93          97.000         80.9
## 15      55.775      47.13       220.00         177.000         80.3
## 16      61.466      46.34       274.00         693.000         77.5
## 17      70.735      45.48       161.00         314.000         80.5
## 18      37.557      44.23       300.00         502.000         67.1
## 19      54.327      46.43       301.00         251.000         80.0
## 20      52.858      42.94        10.51         220.000         75.8
## 21      64.066      44.63        26.15         264.000         79.5
##    Percepcion_seguridad Tasa_Desem_H_16_24 Tasa_Desem_H_25_44
## 1                  69.8               3.68               6.00
## 2                  54.4               5.61               7.98
## 3                  49.1               6.40               8.49
## 4                  44.9               7.03               9.04
## 5                  46.8               7.80               9.88
## 6                  61.0               5.18               7.88
## 7                  56.1               3.79               6.36
## 8                  60.9               3.43               5.13
## 9                  41.6               7.69               9.46
## 10                 52.5               7.69               7.21
## 11                 59.8               6.20               8.20
## 12                 68.6               3.53               5.65
## 13                 66.0               4.76               7.21
## 14                 67.6               3.23               4.95
## 15                 66.6               1.99               5.05
## 16                 73.0               1.99               4.05
## 17                 73.0               1.71               3.86
## 18                 60.4               4.62               5.71
## 19                 75.2               2.19               4.52
## 20                 67.3               2.92               4.92
## 21                 70.5               2.12               4.91
##    Tasa_Desem_H_45_64 Tasa_Desem_M_16_24 Tasa_Desem_M_25_44 Tasa_Desem_M_45_64
## 1               11.11               3.22               6.81              10.83
## 2               10.59               5.39               9.74              11.64
## 3               11.09               6.41              10.70              12.38
## 4               11.44               7.88              11.74              13.12
## 5               13.03               7.74              12.91              13.52
## 6                9.67               5.33               9.97              11.08
## 7                9.88               3.63               7.84              10.54
## 8                7.64               2.85               7.00               9.79
## 9               11.53               7.77              13.38              14.09
## 10               9.75               8.31              10.66              12.95
## 11               8.48               6.60              11.12              11.37
## 12               7.91               3.31               6.82               8.78
## 13               9.48               4.59               9.40              11.33
## 14               6.88               2.92               6.92               8.55
## 15               6.73               2.13               5.79               7.73
## 16               6.73               1.62               4.84               7.85
## 17               7.02               1.60               4.76               7.85
## 18              10.60               4.41               7.33              10.75
## 19               6.98               2.25               5.15               7.91
## 20               7.03               2.70               6.45               8.64
## 21               6.98               1.94               5.99               7.55
##    Num_Delitos_Perso Num_Delitos_Pat Num_Delitos_Armas Num_Delitos_Drogas
## 1                943            1439               716               2155
## 2                157             185                29                214
## 3                376             296                49                345
## 4                272             310                25                335
## 5                359             389               142                531
## 6                 67             101                21                122
## 7                344             374                49                423
## 8                 97             103                26                129
## 9                216             259                27                286
## 10               159             351                39                390
## 11                66              51                10                 61
## 12               199             287                19                306
## 13               223             288                30                318
## 14                70             186                 4                190
## 15                70              86                20                106
## 16               113             438                18                456
## 17               100             154                15                169
## 18               344             228                30                258
## 19               144             158                 7                165
## 20               130             110                22                132
## 21               174             276                20                296
##    Valor_Cat_Fisicas Valor_Cat_Juridicas Vivienda_NoConsta Vivienda_Bueno
## 1              117.0                 593              1875          74970
## 2               61.5                 232              1735         107455
## 3               52.8                 142              4135         103880
## 4               50.5                 169              1255          54565
## 5               43.7                  99              2285          92170
## 6               82.5                 248               140          43755
## 7               83.8                 292              1230          97780
## 8              108.0                 281              2170          70310
## 9               52.8                 142              1535          55445
## 10              62.0                 139               800          41730
## 11              61.1                 200              2005          27550
## 12              84.1                 297              1320          65310
## 13              71.3                 316               890          63645
## 14              92.0                 979               595          19410
## 15             132.0                 483               900          54950
## 16             160.0                 549              1035          80955
## 17             150.0                 483               460          69735
## 18              89.2                 271               580          72245
## 19             133.0                 483               365          76720
## 20              94.0                 508              1680          95455
## 21             143.0                 629               780          52235
##    Vivienda_Deficiente Vivienda_Malo Vivienda_Ruina Num_Alquileres_Airbnb
## 1                 7895        1725.0         330.00                 10607
## 2                 5245         810.0         250.00                   720
## 3                 6090        1035.0         125.00                   889
## 4                 2715         370.0         380.00                   606
## 5                 9785        1880.0         470.00                   719
## 6                  415         635.5          95.00                   186
## 7                 2385         260.0          85.00                   818
## 8                 1600         735.0         120.00                   529
## 9                 3655        1145.0         140.00                   252
## 10                 775         175.0          40.00                   120
## 11                 675          75.0         171.25                    79
## 12                7200        1885.0         540.00                  1247
## 13                2750          45.0         120.00                   568
## 14                 275          50.0          40.00                   176
## 15                 445         255.0          45.00                   864
## 16                1255         265.0          70.00                  1708
## 17                1635         175.0         120.00                   730
## 18                5940        1130.0         270.00                  1326
## 19                2290         370.0          35.00                  1645
## 20                1890         110.0         125.00                   355
## 21                1865         215.0          25.00                   684
##    Target
## 1       0
## 2       1
## 3       1
## 4       0
## 5       1
## 6       1
## 7       1
## 8       1
## 9       1
## 10      1
## 11      1
## 12      0
## 13      0
## 14      0
## 15      0
## 16      0
## 17      0
## 18      0
## 19      0
## 20      0
## 21      0

6.2 Estudio de posibles valores anormales

# posibles valores anómalos
for(i in 1:24){
  boxplot(df_clust[,i] ~ df_clust$Target, main =colnames(df_clust)[i], xlab = "Target",
          ylab = colnames(df_clust)[i], col="lightblue")
}

6.3 Normalización de las variables

# Normalización de las variables

# Función de Normalización
fun_normalize <- function(x, na.rm = TRUE) {
  return((x- min(x)) /(max(x)-min(x)))
}

df_clust_Normalized <- as.data.frame(apply(df_clust,MARGIN  = 2, FUN = fun_normalize))

summary(df_clust_Normalized)
##   Renta_Media       Edad_Media      Densidad_Pob    Num_Detenciones 
##  Min.   :0.0000   Min.   :0.0000   Min.   :0.0000   Min.   :0.0000  
##  1st Qu.:0.1387   1st Qu.:0.3961   1st Qu.:0.2064   1st Qu.:0.2542  
##  Median :0.2474   Median :0.5959   Median :0.5181   Median :0.4190  
##  Mean   :0.3715   Mean   :0.5874   Mean   :0.4640   Mean   :0.4270  
##  3rd Qu.:0.5964   3rd Qu.:0.8002   3rd Qu.:0.7212   3rd Qu.:0.5707  
##  Max.   :1.0000   Max.   :1.0000   Max.   :1.0000   Max.   :1.0000  
##   Calidad_Vida    Percepcion_seguridad Tasa_Desem_H_16_24 Tasa_Desem_H_25_44
##  Min.   :0.0000   Min.   :0.0000       Min.   :0.0000     Min.   :0.0000    
##  1st Qu.:0.5000   1st Qu.:0.3810       1st Qu.:0.1987     1st Qu.:0.1811    
##  Median :0.7033   Median :0.5774       Median :0.3415     Median :0.3555    
##  Mean   :0.6518   Mean   :0.5832       Mean   :0.4508     Mean   :0.4382    
##  3rd Qu.:0.8780   3rd Qu.:0.8036       3rd Qu.:0.7373     3rd Qu.:0.6844    
##  Max.   :1.0000   Max.   :1.0000       Max.   :1.0000     Max.   :1.0000    
##  Tasa_Desem_H_45_64 Tasa_Desem_M_16_24 Tasa_Desem_M_25_44 Tasa_Desem_M_45_64
##  Min.   :0.00000    Min.   :0.0000     Min.   :0.0000     Min.   :0.0000    
##  1st Qu.:0.04603    1st Qu.:0.1639     1st Qu.:0.1961     1st Qu.:0.1529    
##  Median :0.43651    Median :0.3025     Median :0.2981     Median :0.4893    
##  Mean   :0.37203    Mean   :0.4187     Mean   :0.4163     Mean   :0.4347    
##  3rd Qu.:0.61429    3rd Qu.:0.7168     3rd Qu.:0.6845     3rd Qu.:0.6254    
##  Max.   :1.00000    Max.   :1.0000     Max.   :1.0000     Max.   :1.0000    
##  Num_Delitos_Perso Num_Delitos_Pat   Num_Delitos_Armas Num_Delitos_Drogas
##  Min.   :0.00000   Min.   :0.00000   Min.   :0.00000   Min.   :0.00000   
##  1st Qu.:0.03877   1st Qu.:0.07421   1st Qu.:0.02107   1st Qu.:0.04967   
##  Median :0.10604   Median :0.14986   Median :0.02949   Median :0.10745   
##  Mean   :0.17576   Mean   :0.17147   Mean   :0.08253   Mean   :0.13885   
##  3rd Qu.:0.23489   3rd Qu.:0.18660   3rd Qu.:0.03652   3rd Qu.:0.13563   
##  Max.   :1.00000   Max.   :1.00000   Max.   :1.00000   Max.   :1.00000   
##  Valor_Cat_Fisicas Valor_Cat_Juridicas Vivienda_NoConsta Vivienda_Bueno  
##  Min.   :0.0000    Min.   :0.0000      Min.   :0.0000    Min.   :0.0000  
##  1st Qu.:0.1531    1st Qu.:0.1148      1st Qu.:0.1602    1st Qu.:0.3993  
##  Median :0.3474    Median :0.2193      Median :0.2728    Median :0.5716  
##  Mean   :0.4122    Mean   :0.2952      Mean   :0.2960    Mean   :0.5477  
##  3rd Qu.:0.6303    3rd Qu.:0.4364      3rd Qu.:0.3992    3rd Qu.:0.6990  
##  Max.   :1.0000    Max.   :1.0000      Max.   :1.0000    Max.   :1.0000  
##  Vivienda_Deficiente Vivienda_Malo     Vivienda_Ruina    Num_Alquileres_Airbnb
##  Min.   :0.0000      Min.   :0.00000   Min.   :0.00000   Min.   :0.00000      
##  1st Qu.:0.1030      1st Qu.:0.07065   1st Qu.:0.08738   1st Qu.:0.02622      
##  Median :0.2119      Median :0.17663   Median :0.18447   Median :0.06079      
##  Mean   :0.3055      Mean   :0.32092   Mean   :0.28398   Mean   :0.10480      
##  3rd Qu.:0.5226      3rd Qu.:0.53804   3rd Qu.:0.43689   3rd Qu.:0.07694      
##  Max.   :1.0000      Max.   :1.00000   Max.   :1.00000   Max.   :1.00000      
##      Target      
##  Min.   :0.0000  
##  1st Qu.:0.0000  
##  Median :0.0000  
##  Mean   :0.4286  
##  3rd Qu.:1.0000  
##  Max.   :1.0000

6.4 Correlación de variables antes de PCA

# correlación de las variables
x <- df_clust_Normalized[-df_clust_Normalized$Target]

corr_map <- ggcorr(x, method=c("everything", "pearson"), nbreaks = 4, label=TRUE, label_size = 3, label_alpha = TRUE, hjust = .90, size = 2, layout.exp = 1)
corr_map

6.5 Análisis de Componentes Principales (PCA)

# Análisis de Componentes Principales (PCA)
df_pca <- df_clust_Normalized %>%
  select(-Target)

# escalado
df_scaled <- scale(df_pca)

# algoritmo PCA
pca <- PCA(df_scaled, graph = FALSE)
summary(pca)
## 
## Call:
## PCA(X = df_scaled, graph = FALSE) 
## 
## 
## Eigenvalues
##                        Dim.1   Dim.2   Dim.3   Dim.4   Dim.5   Dim.6   Dim.7
## Variance              10.910   6.136   2.405   1.314   1.063   0.627   0.373
## % of var.             45.459  25.567  10.022   5.477   4.428   2.612   1.553
## Cumulative % of var.  45.459  71.026  81.047  86.524  90.952  93.565  95.117
##                        Dim.8   Dim.9  Dim.10  Dim.11  Dim.12  Dim.13  Dim.14
## Variance               0.293   0.254   0.169   0.162   0.096   0.080   0.052
## % of var.              1.219   1.058   0.704   0.676   0.400   0.335   0.217
## Cumulative % of var.  96.336  97.394  98.098  98.774  99.174  99.509  99.725
##                       Dim.15  Dim.16  Dim.17  Dim.18  Dim.19  Dim.20
## Variance               0.028   0.020   0.010   0.005   0.004   0.000
## % of var.              0.116   0.083   0.041   0.020   0.015   0.001
## Cumulative % of var.  99.841  99.924  99.964  99.984  99.999 100.000
## 
## Individuals (the 10 first)
##                           Dist    Dim.1    ctr   cos2    Dim.2    ctr   cos2  
## 1                     | 10.272 |  1.525  1.015  0.022 |  9.746 73.719  0.900 |
## 2                     |  3.373 |  2.215  2.141  0.431 | -0.442  0.151  0.017 |
## 3                     |  5.506 |  4.048  7.152  0.540 |  0.084  0.006  0.000 |
## 4                     |  4.846 |  4.239  7.844  0.765 | -1.226  1.167  0.064 |
## 5                     |  7.025 |  6.408 17.921  0.832 |  1.164  1.051  0.027 |
## 6                     |  3.456 |  0.004  0.000  0.000 | -1.586  1.951  0.211 |
## 7                     |  2.555 |  0.119  0.006  0.002 |  0.278  0.060  0.012 |
## 8                     |  2.744 | -1.418  0.878  0.267 | -0.911  0.644  0.110 |
## 9                     |  5.665 |  5.045 11.110  0.793 | -1.867  2.704  0.109 |
## 10                    |  4.815 |  2.554  2.846  0.281 | -2.501  4.855  0.270 |
##                        Dim.3    ctr   cos2  
## 1                     -2.755 15.024  0.072 |
## 2                      1.731  5.933  0.263 |
## 3                      2.196  9.547  0.159 |
## 4                     -0.240  0.114  0.002 |
## 5                      0.655  0.850  0.009 |
## 6                     -0.327  0.212  0.009 |
## 7                      1.440  4.104  0.318 |
## 8                     -0.089  0.016  0.001 |
## 9                     -0.329  0.214  0.003 |
## 10                    -2.402 11.421  0.249 |
## 
## Variables (the 10 first)
##                          Dim.1    ctr   cos2    Dim.2    ctr   cos2    Dim.3
## Renta_Media           | -0.942  8.135  0.887 |  0.023  0.009  0.001 |  0.068
## Edad_Media            | -0.430  1.694  0.185 |  0.277  1.253  0.077 |  0.589
## Densidad_Pob          | -0.072  0.047  0.005 |  0.586  5.597  0.343 |  0.558
## Num_Detenciones       | -0.006  0.000  0.000 | -0.175  0.499  0.031 |  0.629
## Calidad_Vida          | -0.922  7.789  0.850 |  0.100  0.162  0.010 | -0.128
## Percepcion_seguridad  | -0.890  7.257  0.792 |  0.314  1.611  0.099 | -0.068
## Tasa_Desem_H_16_24    |  0.943  8.151  0.889 | -0.265  1.144  0.070 | -0.127
## Tasa_Desem_H_25_44    |  0.935  8.008  0.874 | -0.209  0.715  0.044 | -0.038
## Tasa_Desem_H_45_64    |  0.942  8.126  0.887 |  0.188  0.576  0.035 |  0.076
## Tasa_Desem_M_16_24    |  0.915  7.665  0.836 | -0.312  1.584  0.097 | -0.143
##                          ctr   cos2  
## Renta_Media            0.193  0.005 |
## Edad_Media            14.446  0.347 |
## Densidad_Pob          12.968  0.312 |
## Num_Detenciones       16.429  0.395 |
## Calidad_Vida           0.684  0.016 |
## Percepcion_seguridad   0.192  0.005 |
## Tasa_Desem_H_16_24     0.666  0.016 |
## Tasa_Desem_H_25_44     0.059  0.001 |
## Tasa_Desem_H_45_64     0.243  0.006 |
## Tasa_Desem_M_16_24     0.855  0.021 |
# significado de cada variable
var <- get_pca_var(pca)
var
## Principal Component Analysis Results for variables
##  ===================================================
##   Name       Description                                    
## 1 "$coord"   "Coordinates for the variables"                
## 2 "$cor"     "Correlations between variables and dimensions"
## 3 "$cos2"    "Cos2 for the variables"                       
## 4 "$contrib" "contributions of the variables"
# Visualizar la varianza explicada por cada componente
fviz_eig(pca, addlabels = TRUE)

# Visualizar la contribución de las variables originales en los componentes principales
fviz_contrib(pca, choice = "var")

var <- get_pca_var(pca)
var
## Principal Component Analysis Results for variables
##  ===================================================
##   Name       Description                                    
## 1 "$coord"   "Coordinates for the variables"                
## 2 "$cor"     "Correlations between variables and dimensions"
## 3 "$cos2"    "Cos2 for the variables"                       
## 4 "$contrib" "contributions of the variables"
# Biplot para visualizar las observaciones y las variables en el espacio de los componentes principales
fviz_pca_biplot(pca, geom.ind = "point", col.ind = "blue2",
                geom.var = "arrow", col.var = "red", alpha.var = 0.7)

# correlaciones despues de PCA
corrplot(var$cos2, is.corr=FALSE)

# Color by cos2 values: quality on the factor map
fviz_pca_var(pca, col.var = "cos2",
             gradient.cols = c("#00AFBB", "#E7B800", "#FC4E07"),
             repel = TRUE
             )

# Obtener los valores de los componentes principales para cada observación
df_pca_scores <- as.data.frame(pca$ind$coord)

# Agregar la variable de objetivo "Target" a los resultados del PCA
df_pca_scores$Target <- df_clust_Normalized$Target

head(df_pca_scores)
##         Dim.1       Dim.2      Dim.3       Dim.4      Dim.5 Target
## 1 1.525148205  9.74632614 -2.7546998  0.60412050  0.1687694      0
## 2 2.214563962 -0.44177627  1.7311050 -0.14158094 -0.4077584      1
## 3 4.047881152  0.08438634  2.1959345  1.99307260 -1.6927330      1
## 4 4.239270657 -1.22645171 -0.2404409 -0.01512372  1.2100450      0
## 5 6.407791626  1.16375314  0.6551358 -2.04319392 -0.8058294      1
## 6 0.003757407 -1.58570626 -0.3269971 -1.26365819  2.0807058      1
# Visualizar los resultados del PCA con la variable objetivo
ggplot(df_pca_scores, aes(Dim.1, Dim.2, color = Target)) +
  geom_point() +
  labs(title = "PCA", 
       x = "Componente Principal 1", 
       y = "Componente Principal 2")

# contribución de las variables a los componentes
corrplot(var$contrib, is.corr=FALSE)

# variables más relevantes (contribuyentes)
fviz_pca_var(pca, col.var = "contrib",

gradient.cols = c("#00AFBB", "#E7B800", "#FC4E07")
)


7 K-means


7.1 Selección de K. Método “Elbow”

# determinación del número de clústeres.

fviz_nbclust(x, FUNcluster = kmeans, method = "silhouette", k.max = 10) +
  labs(title = "Número óptimo de clusters")

# Elbow Method
fviz_nbclust(x, FUNcluster = kmeans, method = "wss", k.max = 10) +
  labs(title = "Número óptimo de clusters")

7.2 algoritmo K-means para 3 clústeres

# k-means 3 clusters
kmeans_clusters <- kmeans(x, centers = 3, iter.max = 100)
kmeans_clusters$centers
##   Edad_Media Densidad_Pob Num_Detenciones Calidad_Vida Percepcion_seguridad
## 1  0.6585821    0.4264303       0.4025432    0.9136179            0.8232887
## 2  0.6218905    0.8932838       0.3813342    0.6734417            0.7341270
## 3  0.5200918    0.3652139       0.4601908    0.4357724            0.3458333
##   Tasa_Desem_H_16_24 Tasa_Desem_H_25_44 Tasa_Desem_H_45_64 Tasa_Desem_M_16_24
## 1          0.1211002          0.1351744         0.04265873         0.09705663
## 2          0.3667214          0.3200443         0.49894180         0.30501739
## 3          0.7397373          0.7161130         0.59746032         0.71013413
##   Tasa_Desem_M_25_44 Tasa_Desem_M_45_64 Num_Delitos_Perso Num_Delitos_Pat
## 1          0.1279002          0.1045489         0.0527366      0.09933357
## 2          0.2583140          0.3929664         0.4895477      0.43251681
## 3          0.6944316          0.7113150         0.1800456      0.15086455
##   Num_Delitos_Armas Num_Delitos_Drogas Valor_Cat_Fisicas Valor_Cat_Juridicas
## 1        0.01755618         0.06894699         0.7119518           0.5117898
## 2        0.35252809         0.40369309         0.4562912           0.3272727
## 3        0.05351124         0.11532951         0.1590714           0.1123864
##   Vivienda_NoConsta Vivienda_Bueno Vivienda_Deficiente Vivienda_Malo
## 1         0.2147997      0.5174769           0.1190195     0.1233016
## 2         0.2799332      0.5841520           0.7083771     0.8342391
## 3         0.3657071      0.5609347           0.3337539     0.3250272
##   Vivienda_Ruina Num_Alquileres_Airbnb Target
## 1     0.09223301            0.07193911  0.125
## 2     0.68932039            0.40979610  0.000
## 3     0.31577670            0.03958017  0.800
# matriz de confusión
t <- table(kmeans_clusters$cluster, df_clust$Target)
t
##    
##     0 1
##   1 7 1
##   2 3 0
##   3 2 8
fviz_cluster(object = kmeans_clusters, data = x, show.clust.cent = TRUE,
             ellipse.type = "euclid", star.plot = TRUE, repel = FALSE) +
  labs(title = "Resultados clustering K-means 3 Clústers") +
  theme_bw() +
  theme(legend.position = "none")
## Too few points to calculate an ellipse

7.3 algoritmo K-means para 2 clústeres

# k-means 2 clusters
kmeans_clusters <- kmeans(x, centers = 2, iter.max = 100)
kmeans_clusters$centers
##   Edad_Media Densidad_Pob Num_Detenciones Calidad_Vida Percepcion_seguridad
## 1  0.5227708    0.3821512       0.4479074    0.4209575            0.3035714
## 2  0.6358592    0.5253394       0.4112575    0.8248645            0.7929067
##   Tasa_Desem_H_16_24 Tasa_Desem_H_25_44 Tasa_Desem_H_45_64 Tasa_Desem_M_16_24
## 1          0.7662835          0.7338501          0.6153439          0.7395264
## 2          0.2141489          0.2165006          0.1895503          0.1780924
##   Tasa_Desem_M_25_44 Tasa_Desem_M_45_64 Num_Delitos_Perso Num_Delitos_Pat
## 1          0.7117814          0.7261298         0.1801596       0.1486551
## 2          0.1947022          0.2161060         0.1724629       0.1885807
##   Num_Delitos_Armas Num_Delitos_Drogas Valor_Cat_Fisicas Valor_Cat_Juridicas
## 1         0.0553995          0.1145071         0.1503774          0.09747475
## 2         0.1028792          0.1571156         0.6084838          0.44356061
##   Vivienda_NoConsta Vivienda_Bueno Vivienda_Deficiente Vivienda_Malo
## 1         0.3854819      0.5674371           0.3419208     0.3611413
## 2         0.2288277      0.5328904           0.2781283     0.2907609
##   Vivienda_Ruina Num_Alquileres_Airbnb     Target
## 1      0.3303668            0.03881712 0.88888889
## 2      0.2491909            0.15427907 0.08333333
# matriz de confusión
t <- table(kmeans_clusters$cluster, df_clust$Target)
t
##    
##      0  1
##   1  1  8
##   2 11  1
fviz_cluster(object = kmeans_clusters, data = x, show.clust.cent = TRUE,
             ellipse.type = "euclid", star.plot = TRUE, repel = FALSE) +
  labs(title = "Resultados clustering K-means 2 Clústeres") +
  theme_bw() +
  theme(legend.position = "none")

#  2 clusters para los datos normalizados
km <- kmeans_clusters
par(mfrow=c(1,2))
#Sacamos las gráficas
for (i in 1:23){
  for (j in (i+1):24){
   
      plot(x[c(i,j)], col=km$cluster, main="Clasificación k-means")
    legend("topright",
           legend = levels(factor(km$cluster)),
           pch = 10,cex = 0.9,
           col = factor(levels(factor(km$cluster))))
      
      plot(x[c(i,j)], col=as.factor(df_clust$Target), main="Clasificación real")
      legend("topright",
             legend = levels(factor(df_clust$Target)),
             pch = 10,cex=0.9,
             col = factor(levels(factor(df_clust$Target))))
    
  }
}

x %>%
  mutate(cluster = km$cluster) %>%
  group_by(cluster) %>%
  summarise_all("mean")
## # A tibble: 2 × 25
##   cluster Edad_Media Densidad_…¹ Num_D…² Calid…³ Perce…⁴ Tasa_…⁵ Tasa_…⁶ Tasa_…⁷
##     <int>      <dbl>       <dbl>   <dbl>   <dbl>   <dbl>   <dbl>   <dbl>   <dbl>
## 1       1      0.523       0.382   0.448   0.421   0.304   0.766   0.734   0.615
## 2       2      0.636       0.525   0.411   0.825   0.793   0.214   0.217   0.190
## # … with 16 more variables: Tasa_Desem_M_16_24 <dbl>, Tasa_Desem_M_25_44 <dbl>,
## #   Tasa_Desem_M_45_64 <dbl>, Num_Delitos_Perso <dbl>, Num_Delitos_Pat <dbl>,
## #   Num_Delitos_Armas <dbl>, Num_Delitos_Drogas <dbl>, Valor_Cat_Fisicas <dbl>,
## #   Valor_Cat_Juridicas <dbl>, Vivienda_NoConsta <dbl>, Vivienda_Bueno <dbl>,
## #   Vivienda_Deficiente <dbl>, Vivienda_Malo <dbl>, Vivienda_Ruina <dbl>,
## #   Num_Alquileres_Airbnb <dbl>, Target <dbl>, and abbreviated variable names
## #   ¹​Densidad_Pob, ²​Num_Detenciones, ³​Calidad_Vida, ⁴​Percepcion_seguridad, …
# Número de distritos en el clúster 1
sum(km$cluster == 1)
## [1] 9
# Número de distritos en el clúster 2
sum(km$cluster == 2)
## [1] 12

7.4 Validación del agrupamiento con k=2

# validación del agrupamiento
X <- df_pca_scores$Dim.1
Y <- df_pca_scores$Dim.2
df_XY <- as.data.frame(cbind(X,Y))

grupos <- as.factor(km$cluster)
x$gent <- as.factor(ifelse(x$Target==1,1,2))

# gráfica de las 2 componentes principales con k-means (k=2)
ggplot(df_XY,aes(X,Y,col=grupos)) + geom_point(size=4) + xlab('dimensión 1') + ylab('Dimensión 2') + ggtitle('Componentes principales Dim 1 y Dim 2 \n agrupadas con K-means (K=2)') + theme(text = element_text(size=12))

# gráfica de las observaciones en las 2 componentes principales con k-means (k=2) y con la variable Target
ggplot(df_XY,aes(X,Y,col=grupos, shape=x$gent)) + geom_point(size=4) + xlab('dimensión 1') + ylab('Dimensión 2') + ggtitle('Componentes principales Dim 1 y Dim 2 \n agrupadas con K-means (K=2) y la variable objetivo') + theme(text = element_text(size=12))


8 K-medoids


8.1 algoritmo K-medoids para 3 clústeres

# K-medoids
pam_clusters <- pam(x, k = 3, metric = "manhattan")
#medoids obtenidos
pam_clusters$medoids
##      Edad_Media Densidad_Pob Num_Detenciones Calidad_Vida Percepcion_seguridad
## [1,]  0.6119403   0.99655754       0.7239450    0.4390244            0.5595238
## [2,]  0.8783008   0.29085339       0.5042572    0.5000000            0.3809524
## [3,]  0.6578645   0.05384006       0.3799601    0.9430894            0.8601190
##      Tasa_Desem_H_16_24 Tasa_Desem_H_25_44 Tasa_Desem_H_45_64
## [1,]         0.47783251          0.3073090         0.61428571
## [2,]         0.64039409          0.6843854         0.61269841
## [3,]         0.06732348          0.1744186         0.03968254
##      Tasa_Desem_M_16_24 Tasa_Desem_M_25_44 Tasa_Desem_M_45_64 Num_Delitos_Perso
## [1,]         0.41877794          0.2981439          0.4892966         0.3169897
## [2,]         0.56482861          0.5777262          0.6253823         0.1037628
## [3,]         0.05067064          0.1426914          0.0000000         0.1231471
##      Num_Delitos_Pat Num_Delitos_Armas Num_Delitos_Drogas Valor_Cat_Fisicas
## [1,]      0.12752161        0.03651685         0.09407832         0.3912296
## [2,]      0.09654179        0.03511236         0.07306590         0.1530525
## [3,]      0.16210375        0.02247191         0.11222541         0.8538263
##      Valor_Cat_Juridicas Vivienda_NoConsta Vivienda_Bueno Vivienda_Deficiente
## [1,]           0.1954545         0.1101377      0.6000909           0.5956887
## [2,]           0.1511364         0.3992491      1.0000000           0.5226078
## [3,]           0.6022727         0.1602003      0.3728207           0.1671924
##      Vivienda_Malo Vivienda_Ruina Num_Alquileres_Airbnb Target gent
## [1,]     0.5896739      0.4757282            0.11844605      0    2
## [2,]     0.4157609      0.4368932            0.06088526      1    1
## [3,]     0.0923913      0.0000000            0.05746581      0    2
# información de clústeres obtenidos
pam_clusters$clusinfo
##      size max_diss  av_diss  diameter separation
## [1,]    5 7.834978 4.382126 12.145675   4.330653
## [2,]    9 6.537391 4.291483 10.220301   4.180328
## [3,]    7 3.424701 2.381064  6.187316   4.180328
# Visualización del resultado de agrupamiento con K-medoids.

fviz_cluster(object = pam_clusters, data = x, ellipse.type = "t",
             repel = FALSE) +
  theme_bw() +
  labs(title = "Resultados clustering K-medoids k=3 clústeres") +
  theme(legend.position = "none")

# matriz de confusión
t <- table(pam_clusters$cluster, df_clust$Target)
t
##    
##     0 1
##   1 5 0
##   2 0 9
##   3 7 0

8.2 algoritmo K-medoids para 2 clústeres

# K-medoids
pam_clusters <- pam(x, k = 2, metric = "manhattan")
#medoids obtenidos
pam_clusters$medoids
##      Edad_Media Densidad_Pob Num_Detenciones Calidad_Vida Percepcion_seguridad
## [1,]  0.6578645   0.05384006       0.3799601    0.9430894            0.8601190
## [2,]  0.8783008   0.29085339       0.5042572    0.5000000            0.3809524
##      Tasa_Desem_H_16_24 Tasa_Desem_H_25_44 Tasa_Desem_H_45_64
## [1,]         0.06732348          0.1744186         0.03968254
## [2,]         0.64039409          0.6843854         0.61269841
##      Tasa_Desem_M_16_24 Tasa_Desem_M_25_44 Tasa_Desem_M_45_64 Num_Delitos_Perso
## [1,]         0.05067064          0.1426914          0.0000000         0.1231471
## [2,]         0.56482861          0.5777262          0.6253823         0.1037628
##      Num_Delitos_Pat Num_Delitos_Armas Num_Delitos_Drogas Valor_Cat_Fisicas
## [1,]      0.16210375        0.02247191          0.1122254         0.8538263
## [2,]      0.09654179        0.03511236          0.0730659         0.1530525
##      Valor_Cat_Juridicas Vivienda_NoConsta Vivienda_Bueno Vivienda_Deficiente
## [1,]           0.6022727         0.1602003      0.3728207           0.1671924
## [2,]           0.1511364         0.3992491      1.0000000           0.5226078
##      Vivienda_Malo Vivienda_Ruina Num_Alquileres_Airbnb Target gent
## [1,]     0.0923913      0.0000000            0.05746581      0    2
## [2,]     0.4157609      0.4368932            0.06088526      1    1
# información de clústeres obtenidos
pam_clusters$clusinfo
##      size  max_diss  av_diss diameter separation
## [1,]   10 10.784071 3.827416 11.68169    4.03382
## [2,]   11  6.679862 4.674453 10.22030    4.03382
# Visualización del resultado de agrupamiento con K-medoids.

fviz_cluster(object = pam_clusters, data = x, ellipse.type = "t",
             repel = FALSE) +
  theme_bw() +
  labs(title = "Resultados clustering K-medoids k=2 clústeres") +
  theme(legend.position = "none")